使用数据库前的准备
@import
创建并打开数据库
首先, 要创建一个字符串路径, 用于存放数据库的位置以及名称
UTF8String
创建一个全局性的数据库引用指针, 他保证能够全局的操作这个已经打开了的数据库
sqlite3 *db
代码以及解释如下:
// 1. 创建并且打开一个数据库 // 1.1 根据路径打开一个数据库, 如果数据库打开不成功的话, 就创建一个数据库 // 1.2 这里要注意一点, 数据库的名称一般规范为sqlite NSString *path = @"/Users/fanghe/Desktop/数据库/demo.sqlite"; /** * 打开一个数据库 * filename 数据库的文件路径, 这里需要传入UTF8字符串, 所以要强制转化一下 * ppDb 一个已经打开的数据库, 他是一个地址引用, 如果要在后续继续使用这个数据库的话, 就需要操作这个引用 */ if (sqlite3_open(path.UTF8String, &db) != SQLITE_OK) { NSLog(@"数据库打开失败"); return; } else { NSLog(@"数据库打开成功"); }
为数据库创建一个表
数据库的操作, 就需要使用SQL语句, 在OC中, 使用SQL语句表现为:
数据库的执行函数, 以及具体实现代码如下:
// 1. 编写sql语句的字符串 NSString *sql = @"create table if not exists T_human(id integer primary key autoincrement, name text not null, age integer default 18, score real default 60.0)"; // 2. 执行sql语句 /** * sql执行语句 * * @param sqlite3 * 已经打开的数据库引用 * @param sql#> sql语句 * @param callback 回调的代码块 * @param void * 回调代码块中的参数1, 传入nil即可 * @param char **errmsg 错误信息 */ if (sqlite3_exec(db, sql.UTF8String, nil, nil, nil) != SQLITE_OK) { NSLog(@"创建表失败"); return; } else { NSLog(@"创建表成功"); }
下面是DDL的drop语句以及alert语句
- (IBAction)dropTable:(id)sender { // 1. sql语句 NSString *sql = @"drop table if exists T_human"; // 2. 执行sql语句 if (sqlite3_exec(db, sql.UTF8String, nil, nil, nil) != SQLITE_OK) { NSLog(@"删除失败"); return; } else { NSLog(@"删除成功"); } } - (IBAction)alertTable:(id)sender { // 1. sql语句 NSString *sql = @"alter table T_human add column address text"; // 2. 执行 if (sqlite3_exec(db, sql.UTF8String, nil, nil, nil) != SQLITE_OK) { NSLog(@"修改失败"); return; } else { NSLog(@"修改成功"); } }
总结
libsqlite3.0.tbd
补充, 关于DDL语句工具类的封装
#import "SQLiteTool.h" #import @interface SQLiteTool () @property (nonatomic, assign) sqlite3 *db; @end static SQLiteTool *_instance; @implementation SQLiteTool + (instancetype)shareInstance { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _instance = [[SQLiteTool alloc] init]; [_instance openDataBase]; }); return _instance; } // 打开数据库 - (void)openDataBase { NSString *path = @"/Users/fanghe/Desktop/数据库/demo.sqlite"; if (sqlite3_open(path.UTF8String, &_db) != SQLITE_OK) { NSLog(@"数据库打开失败"); return; } else { NSLog(@"数据库打开成功"); } } // 创建表格 - (void)createTableWithName:(NSString *)name { // 1. 由外界传入的创建表格sql语句 NSString *sql = name; // 2. 执行sql语句 if (sqlite3_exec(_db, sql.UTF8String, nil, nil, nil) != SQLITE_OK) { NSLog(@"创建表失败"); return; } else { NSLog(@"创建表成功"); } } // 删除表格 - (void)dropTableWithName:(NSString *)name { // 1. sql语句 NSString *sql = [NSString stringWithFormat:@"drop table if exists %@", name]; // 2. 执行sql语句 if (sqlite3_exec(_db, sql.UTF8String, nil, nil, nil) != SQLITE_OK) { NSLog(@"删除失败"); return; } else { NSLog(@"删除成功"); } } // 修改表格 - (void)alertTableWithName:(NSString *)name { // 1. sql语句 NSString *sql = [NSString stringWithFormat:@"alter table %@ add column address text", name]; // 2. 执行 if (sqlite3_exec(_db, sql.UTF8String, nil, nil, nil) != SQLITE_OK) { NSLog(@"修改失败"); return; } else { NSLog(@"修改成功"); } } @end