2011-09-11 84 views
0

我有一個SQLite數據庫,我可以用SQLite瀏覽器打開它,執行對它的查詢等。但是我無法從我的Xcode項目中獲取任何數據。iOS,SQLite:無法從數據庫中讀取

NSString *databaseName = @"dbFile.db"; 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
NSString *databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
sqlite3 *database; 

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 
    NSLog(@"db is ok"); // works just fine 
    const char *sqlStatement = "SELECT table.column FROM table"; 
    sqlite3_stmt *compiledStatement; 

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) { 
     NSLog(@"OK"); // nothing happens 
    } 
    sqlite3_close(database); 
} 

從SQLite瀏覽器爲Mac執行非常相同的查詢工作得很好。

+0

你應該檢查並記錄sqlite報告的錯誤 - 他們可能會告訴你什麼是錯的。 – Mat

+0

@ufw:這工作? 'select table from table',也就是說,沒有列名前綴的表名? – Tim

+0

在這兩種方式中,SQLite日誌都表示找不到合適的表。但是,正如我之前所說,我可以通過獨立的SQLite瀏覽器獲取數據。 – ufw

回答

1

在您開始訪問數據之前,sqlite3_open不會報告所有錯誤。例如幾乎任何文件名和路徑都會通過,沒有錯誤。

確定數據庫在Documents文件夾中嗎?這不是默認設置。 也許它在主包中? NSString * databaseName = [[NSBundle mainBundle] pathForResource:@「dbFile」ofType:@「db」];

+0

你是對的,謝謝! – ufw

+1

如果指定路徑中沒有數據庫,則會創建一個新的空數據塊。因此,在打開之前必須檢查是否存在,可能是來自資源目錄的只讀DB必須複製到doc目錄。 –