從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