1.执行插入数据操作时一直提示
[logging] API call with invalid database connection pointer
找了好久,才发现执行第一次直接执行了添加操作,没有调用打开数据库的操作,所以,在每次操作完成后关闭了数据库,在操作之前一定要先打开数据库。
2.查询的数据显示是错乱的。如下图
原因是读取数据的索引是错误的,这里读取的索引一定要和创建表时的一致。
建表的顺序是这样的:
[Objective-C] 纯文本查看 复制代码 const char * sql = "CREATE TABLE IF NOT EXISTS student(ID INTEGER PRIMARY KEY AUTOINCREMENT, num integer,name 'text', 'sex' 'text','age' integer);";
而我读取的时候是这样的:
[Objective-C] 纯文本查看 复制代码 Student *stu = [[Student alloc] init];
//从伴随指针获取数据,第1列
int num = sqlite3_column_int(stmt, 1);
stu.num = num;
//从伴随指针获取数据,第2列
stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)] ;
//从伴随指针获取数据,第4列
stu.age = sqlite3_column_int(stmt, 3);
//从伴随指针获取数据,第3列
stu.sex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 4)] ;
这里我需要说一下,按照我们创建表的语句来看,我们的字段应该只有 id num name sex 和age。实际上默认还有一个rowid,这个只要建表就会有,所以从我们创建的字段来看,我们的列的索引就是从1开始的。
上面我的age 和 sex 的索引读取是错误的,正确的应该是这样的:
[Objective-C] 纯文本查看 复制代码 Student *stu = [[Student alloc] init];
//从伴随指针获取数据,第1列
int num = sqlite3_column_int(stmt, 1);
stu.num = num;
//从伴随指针获取数据,第2列
stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)] ;
//从伴随指针获取数据,第3列
stu.sex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 3)] ;
//从伴随指针获取数据,第4列
stu.age = sqlite3_column_int(stmt, 4);
demo地址
|