sqlite3更新行语法

时间:2010-08-12 10:19:06

标签: iphone syntax sqlite

从sqlite3文档看起来我应该能够使用以下语法更新iPhone上数据库中的行:


NSString *dbFile  = [[NSBundle mainBundle] pathForResource:@"database" ofType:@"db"];
sqlite3 *database  = NULL;

if (sqlite3_open([dbFile UTF8String], &database) == SQLITE_OK) {
 NSString *sql = [NSString stringWithFormat:@"update mytable set myfirstcolumn=%d, mysecondcolumn=%d where id=%d", int1, int2, int3];
 sqlite3_exec(database, [sql UTF8String], MyCallback, nil, nil);
}

sqlite3_close(database);

但它不会更新数据库,甚至不会调用回调方法。这只是错误的语法,例如在sqlite3_exec()中无法执行更新吗?

在我的示例中,所有列名都是正确的,并且三个int值记录为正确的值,所以我有点想法......

感谢。

2 个答案:

答案 0 :(得分:2)

啊,对,现在想出了可以回答别人的查询的过程。基本上我在资源包中有数据库,我的测试有一些基本数据,我可以读得很好。但由于bundle资源是只读的,我无法将数据写回数据库。

因此,解决方案是在应用程序启动时以编程方式将数据库复制到应用程序的Documents文件夹中,但使用代码查看数据库是否已存在(为了不覆盖它)。由于此文件夹是可读写的,因此更新数据库时应该没有问题。

答案 1 :(得分:0)

sqlite3_exec通常返回错误代码(int),最后一个参数可以是指向将设置错误消息的字符串的指针。那些人怎么说?

sqlite3_exec(database, [sql UTF8String], MyCallback, nil, &errorMsg);