@interface ViewController () {
//创建数据库指针
sqlite3 *db;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//数据库, 存储数据的仓库, 数据以表的形式存放在数据库中, 表中每一列都有一个名字(字段), 其中有一个字段标示数据的唯一性, 称为主键, 主键唯一, 不为空
//常见的数据库有: access, MySQL, SQLServer, Oracel
//移动开发常用的轻量级数据库: sqlite
//对于数据库进行操作, 要使用到SQL(结构化查询语言)
//常用的操作有: 创建表, 增删改查数据
//insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...)
//update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... where id = 值
//select *from 表名
//select 字段名1, 字段名2, ... from 表名
//select *from 表名 where id = 值
//注: SQL语言本身不区分大小写, 也不区分 " 和 ' , 但是, 语句中的表名, 字段和值都区分大小写, 字符串要加双引号或单引号
}
//对Sqlite数据库进行操作
//1. 导入 libsqlite3.0.dylib
//2. 引入头文件 <sqlite3.h>
- (IBAction)open:(UIButton *)sender {
//判断数据库是否打开了, 如果打开了就不用再次执行打开操作
if (db) {
return;
}
//.sqlite文件的路径
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *dbPath = [NSString stringWithFormat:@"%@/database.sqlite", docPath];
NSLog(@"%@", dbPath);
//[dbPath UTF8String], 把字符串从OC转成C的类型
//创建一个数据库指针
db = nil;
//打开数据库, 并把给定 数据库指针 指向 打开的数据库
int result = sqlite3_open([dbPath UTF8String], &db);
if (result == SQLITE_OK) {
NSLog(@"打开数据库成功");
} else {
NSLog(@"打开数据库失败");
}
}
- (IBAction)creat:(UIButton *)sender {
//创建sql语句
NSString *sqlString = @"CREATE TABLE \"Girl\" (\"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , \"name\" TEXT DEFAULT 傻逼, \"gender\" TEXT DEFAULT 女, \"age\" INTEGER DEFAULT 18)";
//创建表
char *error = NULL;
int result = sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败%s", error);
}
}
- (IBAction)add:(UIButton *)sender {
NSString *string = @"insert into Girl (name, age, gender) values ('奎因', 28, '女')";
char *error = nil;
int result = sqlite3_exec(db, [string UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败%s", error);
}
}
- (IBAction)update:(id)sender {
NSString *upDate = @"update Girl set name = '蛮王' where id = 2";
char *error = nil;
int result = sqlite3_exec(db, [upDate UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"更改成功");
}else {
NSLog(@"更改失败%s", error);
}
}
- (IBAction)delete:(id)sender {
NSString *delete = @"delete from Girl where id = 4";
char *error = nil;
int result = sqlite3_exec(db, [delete UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"删除成功");
}else {
NSLog(@"删除失败%s", error);
}
}
- (IBAction)select:(id)sender {
//sql语句
NSString *selectString = @"select * from Girl";
//sql语句指针, statement
sqlite3_stmt *stmt = nil;
//sql语句和指针联系起来
int result = sqlite3_prepare(db, [selectString UTF8String], -1, &stmt, NULL);
if (result == SQLITE_OK) {
NSLog(@"关联成功");
//单步执行, 把查询结果一条一条的找到
//判断有没有一行数据
while (sqlite3_step(stmt) == SQLITE_ROW) {
//找到某一列的数据
int ID = sqlite3_column_int(stmt, 0);
const unsigned char *name = sqlite3_column_text(stmt, 1);
const unsigned char *gender = sqlite3_column_text(stmt, 2);
int age = sqlite3_column_int(stmt, 3);
NSString *nameString = [[NSString alloc] initWithUTF8String:(const char *)name];
NSString *genderString = [[NSString alloc] initWithUTF8String:(const char *)gender];
NSLog(@"%d, %@, %@, %d", ID, nameString, genderString, age);
}
}else {
NSLog(@"关联失败");
}
//释放语句指针
sqlite3_finalize(stmt);
}
- (IBAction)close:(id)sender {
//判断数据库是否处于打开状态
if (db == NULL) {
return;
}
//关闭数据库
int result = sqlite3_close(db);
db = NULL;
if (result == SQLITE_OK) {
NSLog(@"关闭数据库成功");
} else {
NSLog(@"关闭数据库失败");
}
}
//创建数据库指针
sqlite3 *db;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//数据库, 存储数据的仓库, 数据以表的形式存放在数据库中, 表中每一列都有一个名字(字段), 其中有一个字段标示数据的唯一性, 称为主键, 主键唯一, 不为空
//常见的数据库有: access, MySQL, SQLServer, Oracel
//移动开发常用的轻量级数据库: sqlite
//对于数据库进行操作, 要使用到SQL(结构化查询语言)
//常用的操作有: 创建表, 增删改查数据
//insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...)
//update 表名 set 字段名1 = 值1, 字段名2 = 值2, ... where id = 值
//select *from 表名
//select 字段名1, 字段名2, ... from 表名
//select *from 表名 where id = 值
//注: SQL语言本身不区分大小写, 也不区分 " 和 ' , 但是, 语句中的表名, 字段和值都区分大小写, 字符串要加双引号或单引号
}
//对Sqlite数据库进行操作
//1. 导入 libsqlite3.0.dylib
//2. 引入头文件 <sqlite3.h>
- (IBAction)open:(UIButton *)sender {
//判断数据库是否打开了, 如果打开了就不用再次执行打开操作
if (db) {
return;
}
//.sqlite文件的路径
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *dbPath = [NSString stringWithFormat:@"%@/database.sqlite", docPath];
NSLog(@"%@", dbPath);
//[dbPath UTF8String], 把字符串从OC转成C的类型
//创建一个数据库指针
db = nil;
//打开数据库, 并把给定 数据库指针 指向 打开的数据库
int result = sqlite3_open([dbPath UTF8String], &db);
if (result == SQLITE_OK) {
NSLog(@"打开数据库成功");
} else {
NSLog(@"打开数据库失败");
}
}
- (IBAction)creat:(UIButton *)sender {
//创建sql语句
NSString *sqlString = @"CREATE TABLE \"Girl\" (\"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , \"name\" TEXT DEFAULT 傻逼, \"gender\" TEXT DEFAULT 女, \"age\" INTEGER DEFAULT 18)";
//创建表
char *error = NULL;
int result = sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败%s", error);
}
}
- (IBAction)add:(UIButton *)sender {
NSString *string = @"insert into Girl (name, age, gender) values ('奎因', 28, '女')";
char *error = nil;
int result = sqlite3_exec(db, [string UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"插入成功");
} else {
NSLog(@"插入失败%s", error);
}
}
- (IBAction)update:(id)sender {
NSString *upDate = @"update Girl set name = '蛮王' where id = 2";
char *error = nil;
int result = sqlite3_exec(db, [upDate UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"更改成功");
}else {
NSLog(@"更改失败%s", error);
}
}
- (IBAction)delete:(id)sender {
NSString *delete = @"delete from Girl where id = 4";
char *error = nil;
int result = sqlite3_exec(db, [delete UTF8String], NULL, NULL, &error);
if (result == SQLITE_OK) {
NSLog(@"删除成功");
}else {
NSLog(@"删除失败%s", error);
}
}
- (IBAction)select:(id)sender {
//sql语句
NSString *selectString = @"select * from Girl";
//sql语句指针, statement
sqlite3_stmt *stmt = nil;
//sql语句和指针联系起来
int result = sqlite3_prepare(db, [selectString UTF8String], -1, &stmt, NULL);
if (result == SQLITE_OK) {
NSLog(@"关联成功");
//单步执行, 把查询结果一条一条的找到
//判断有没有一行数据
while (sqlite3_step(stmt) == SQLITE_ROW) {
//找到某一列的数据
int ID = sqlite3_column_int(stmt, 0);
const unsigned char *name = sqlite3_column_text(stmt, 1);
const unsigned char *gender = sqlite3_column_text(stmt, 2);
int age = sqlite3_column_int(stmt, 3);
NSString *nameString = [[NSString alloc] initWithUTF8String:(const char *)name];
NSString *genderString = [[NSString alloc] initWithUTF8String:(const char *)gender];
NSLog(@"%d, %@, %@, %d", ID, nameString, genderString, age);
}
}else {
NSLog(@"关联失败");
}
//释放语句指针
sqlite3_finalize(stmt);
}
- (IBAction)close:(id)sender {
//判断数据库是否处于打开状态
if (db == NULL) {
return;
}
//关闭数据库
int result = sqlite3_close(db);
db = NULL;
if (result == SQLITE_OK) {
NSLog(@"关闭数据库成功");
} else {
NSLog(@"关闭数据库失败");
}
}