专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
SQLiteManager创建数据表
- 如果是第一次运行,打开数据库之后,只能得到一个空的数据,没有任何的数据表
- 为了让数据库正常使用,如果数据表不存在,需要执行
创表
操作
注意:创表操作本质上是通过执行
SQL
语句实现的
创建数据表
/** * 通过数据库名称打开数据库 * @param dbName 数据库名称 */ - (void)openDatabaseWithName:(NSString *)dbName { NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject; NSLog(@"documentPath = %@", documentPath); // 拼接数据库路径 NSString *dbPath = [documentPath stringByAppendingPathComponent:dbName]; // const char *filename: 数据库路径 // sqlite3 **ppDb: 数据库指针 int openResult = sqlite3_open(dbPath.UTF8String, &_db); if (openResult == SQLITE_OK) { NSLog(@"打开数据库成功"); // 创建表 NSString *createTableSql = @"CREATE TABLE IF NOT EXISTS T_Person (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, height REAL);"; char *errmsg; // sqlite3 *: 数据库指针 // const char *sql: 要执行的sql语句 // int (*callback)(void *, int, char **, char **): sql语句执行后的回调 // void *: sql语句执行后的回调第一个参数的地址 // char **errmsg: 错误信息 int createTableResult = sqlite3_exec(_db, createTableSql.UTF8String, NULL, NULL, &errmsg); if (createTableResult == SQLITE_OK) { NSLog(@"执行SQL成功"); } else { NSString *errorString = [NSString stringWithCString:errmsg encoding:NSUTF8StringEncoding]; NSLog(@"执行SQL失败: %@", errorString); } } else { NSLog(@"打开数据库失败"); } }
其他地方也需要执行
SQL
语句,抽取 执行SQL
语句函数/** * 执行SQL语句 * @param sqlString 要执行的SQL * @return 执行的结果: 成功或失败 */ - (BOOL)execSQL:(NSString *)sqlString { char *errmsg; // sqlite3 *: 数据库指针 // const char *sql: 要执行的sql语句 // int (*callback)(void *, int, char **, char **): sql语句执行后的回调 // void *: sql语句执行后的回调第一个参数的地址 // char **errmsg: 错误信息 int createTableResult = sqlite3_exec(_db, sqlString.UTF8String, NULL, NULL, &errmsg); if (createTableResult == SQLITE_OK) { NSLog(@"执行SQL成功"); } else { NSString *errorString = [NSString stringWithCString:errmsg encoding:NSUTF8StringEncoding]; NSLog(@"执行SQL失败: %@", errorString); } return createTableResult == SQLITE_OK; }
代码小结
- 创表
SQL
可以从Navicat
中粘贴,然后做一些处理- 将
"
替换成'
- 在每一行后面增加一个
\n
防止字符串拼接因为缺少空格造成SQL
语句错误 - 在
表名
前添加IF NOT EXISTS
防止因为数据表存在出现错误
- 将
调试代码中的SQL
- 将
SQL
打印出来 - 粘贴到
Navicat
里来执行,可以更好的定位SQL
语句错误的位置 - 在拼接
SQL
时,最好在每句后面加\n
.可以避免缺少空格把2个单词误认为一个单词