2010-04-04 33 views
0

我是全新的使用SQLite,所以我可能錯過了一些基本的東西。iPhone上的sqlite可以打開分貝,但不準備語句

我創建了一個數據庫並將其複製到我的應用程序的文檔目錄中。我可以打開它,但是當我調用sqlite3_prepare_v2時,會收到SQLITE_ERROR,「SQL錯誤或缺少數據庫」。

這裏是我的代碼:

sqlite3 *database; 
if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
{ 
    sqlite3_stmt *compiledStatement; 
    NSString *sqlStatement = @"select * from dbname"; 
    int result = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, &compiledStatement, nil); 
    ... 
} 

相同的SQL語句工作在終端。

我在幾個地方發現了這個問題,要麼沒有答案,要麼解決方案不能解決我的問題。我希望這裏有人能夠提供幫助。謝謝。

編輯:

得到它使用Firefox的SQLite的經理工作,是通過終端創建的數據庫文件的問題。

+0

是什麼'dbPath'持有? – 2010-04-04 01:48:58

+0

dbPath是位於應用程序「文檔」區域中的sqlite數據庫文件的路徑。 – jan 2010-04-04 02:23:11

回答

0

由於您使用的是sqlite3_open,如果中的給定位置中尚不存在新的空數據庫,它將自動創建。如果您改爲使用sqlite3_open_v2,則可以將其控制爲僅打開現有數據庫,而不是在缺失時創建它。只需在第三個參數中通過標誌SQLITE_OPEN_READWRITE即可。

如果數據庫以某種方式沒有按預期方式被複制到應用程序文檔文件夾中,則後一種方法應該可以解決這個問題。

希望這有助於

克勞斯

+0

謝謝,我敢打賭,是這樣的,它可能會打開一個新的數據庫而不是我的sqlite文件。 – jan 2010-04-07 06:25:17