2014-10-12 16 views
-1

發生sqlite問題。該查詢在firefox插件SQLiteManager上運行良好。但它不在iOS上運行。我得到一個錯誤代碼1.數據庫連接正常。SQLite查詢在SQLiteManager上運行,但不在iOS上

NSString *sqLiteDb = [[NSBundle mainBundle] pathForResource:@"featureDB" 
                ofType:@"sqlite3"]; 

if (sqlite3_open([sqLiteDb UTF8String], &_database) != SQLITE_OK) { 
    DLog(@"Failed to open database!"); 
} else { 

    DLog(@"Connected to db"); 

} 



NSString *query = [NSString stringWithFormat:@"SELECT * FROM featureTable"]; 

sqlite3_stmt *statement; 


NSLog(@"could not prepare statement: %s\n", sqlite3_errmsg(_database)); 


if (sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) { 
    while (sqlite3_step(statement) == SQLITE_ROW) { 

     DLog(@"row"); 

     int uniqueId = sqlite3_column_int(statement, 0); 



    } 
    sqlite3_finalize(statement); 

    DLog(@"sqliteStep"); 

} else { 

    DLog(@"statement Error %d", sqlite3_prepare_v2(_database, [query UTF8String], -1, &statement, nil)); 

} 

「row or sqliteStep」的日誌從不會觸發。

+0

那麼生成的錯誤信息是什麼? (提示,請閱讀規範。) – 2014-10-12 11:44:53

+1

順便說一句,如果你從包中打開DB,它是隻讀的。這是你的意圖嗎?通常,應用程序會在文檔文件夾中查找數據庫,並且只有在應用程序未將其從軟件包中複製到文檔文件夾時纔會發現該數據庫。請參閱http://stackoverflow.com/a/26325358/1271826。這不是你上面例行公事的問題,而只是一個供參考。 – Rob 2014-10-12 13:22:32

+0

感謝您的提示! – stackOverFlew 2014-10-12 20:12:30

回答

2

else聲明不應該再打電話sqlite3_prepare_v2,而是應該:

DLog(@"prepare error: %s", sqlite3_errmsg(_database)); 

這是什麼錯誤信息報告?

注意:在致電sqlite3_prepare_v2之前,您已經記錄了sqlite3_errmsg。當然,這將報告沒有錯誤,因爲沒有錯誤可能發生。做這個日誌裏面else子句,你知道sqlite3_prepare_v2(a)已被調用;但(b)沒有返回SQLITE_OK。並且在sqlite3_prepare_v2失敗和記錄錯誤消息的位置之間不要調用任何SQLite函數。

最常見的問題是它報告沒有這樣的表。如果這就是你所看到的,在這種情況下,這可能是未能將數據庫包含在應用程序包中的結果(請參閱目標設置的「構建階段」部分的「複製包資源」部分)。或者,如果它說有關數據庫的事情很繁忙,如果您的數據庫打開調用和數據庫關閉調用不匹配(就像您在此代碼示例中那樣),則可能會發生這種情況。

+0

消息報告「沒有錯誤」 – stackOverFlew 2014-10-12 18:52:04

+0

啊!我現在明白了。它說沒有這樣的桌子。 – stackOverFlew 2014-10-12 19:18:08

+0

sqlite3_open_v2([sqLiteDb UTF8String],&_database,SQLITE_OPEN_READWRITE,NULL)返回SQLITE_OK,所以我猜表格拼寫錯誤?但是,如果查詢在其他程序中運行良好,那又如何呢? – stackOverFlew 2014-10-12 19:46:35

1

請確保你的sqlite數據庫沒有用任何sqlite數據庫瀏覽器打開,當你在模擬器中運行應用程序。 它發生在我身上,我有我的sqlite數據庫打開在sqlite瀏覽器來測試我的查詢,當我從模擬器運行應用程序它不更新任何數據庫。

+0

謝謝!不幸的是,我不認爲這個問題= /我關閉了所有的東西,它仍然是一樣的。 – stackOverFlew 2014-10-12 19:49:17

0

問題是我的文件是sqlite擴展名,但代碼指定了sqlite3的擴展名。我認爲這兩個是同義詞,但它們不是

相關問題