从sqlite3的文档,它看起来像我应该能够使用以下语法在我的iPhone数据库中更新行:sqlite3的更新行语法
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()不能执行更新例如?
在我的例子所有的列名是正确的,3个int值数作为正确的价值观,所以我种的想法......
感谢。
嗨, 我刚刚检查了错误代码,它返回8(SQLITE3_READONLY),这是我现在探索的一个起点。我没有意识到捆绑包中的文件是只读的。 任何想法在哪里以及如何将数据库文件放在读写区域? – 2010-08-12 15:16:09
也应该有一个单一的数据库实例,说在应用程序委托,所有其他类访问?使用类似上面的代码在不同类的原始消息中访问数据库将不断创建原始数据库的新实例并覆盖任何新的更改,对吧? – 2010-08-12 15:24:25
@Iain Hemstock - 您不需要拥有单个数据库实例,但这样做可能很有意义。通常,每个线程都有一个数据库实例。数据库更改将在应用程序中的所有数据库实例对象之间共享。这是SQLite设计的方式。 – 2010-08-12 15:37:25