我有一個用於iOs應用程序的sqlite3數據庫,以便爲系統提供脫機支持。iOS應用程序的脫機緩存sqlite3變得損壞
它完美的作品。但有時.db文件損壞。並不返回結果。
如果我檢查SELECT指令throught在命令行中,我得到一個錯誤信息:
sqllite Error: database disk image is malformed
雖然是不可取的它被損壞。數據庫只是一個輔助系統,足以能夠從iOS應用程序檢測到文件已損壞並重新啓動文件。
但使用sqlite3語句我沒有得到任何異常。代碼如下所示:
sqlRaw = @"SELECT ... ";
const char *sql = [sqlRaw cStringUsingEncoding:NSUTF8StringEncoding];
if (sqlite3_prepare_v2(database, sql, -1, &date_statement, NULL) != SQLITE_OK) {
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}
NSMutableArray *entities = [[NSMutableArray alloc] initWithCapacity:0];
while (sqlite3_step(date_statement) == SQLITE_ROW) {
NSData *entityXml = [[NSData alloc] initWithBytes:sqlite3_column_blob(date_statement, 0)
length:sqlite3_column_bytes(date_statement, 0)];
[entities addObject:entityXml];
}
sqlite3_finalize(date_statement);
當應用程序執行前面的代碼時,只需返回一個空數組,不會引發異常。
任何人都知道如何從sqlite3語句檢查.db文件狀態?
也許對用戶其他存儲系統更好。任何建議?
您使用觸發器?我最近在同一個問題上發了一個帖子,結果證明了責備是觸發器的改變。 SQLite是愚蠢的地獄:( – holographix 2012-02-23 11:03:43
啊,我發現線程,你走了。看看它,也許你會發現一些有用的東西http://sqlite.phxsoftware.com/forums/t/650.aspx – holographix 2012-02-23 11:06:05
不,沒有觸發器,只是INDEX對我來說,實際上並不重要,如果文件損壞了,但我需要檢查它:-( – 2012-02-23 11:07:03