2011-02-27 122 views
2

我一直在這個小時,必須得到這個工作!它支撐着iPhone應用程序的發佈......我第一次使用SQLite。我已經遵循了所有的建議,但是我的sqlite3_prepare_v2調用每次都得到一個SQLITE_ERROR(1)!sqlite3_prepare_v2越來越SQLITE_ERROR

這裏是我的控制器我的代碼:

 NSString *query = @"SELECT * FROM QandA ORDER BY random() LIMIT 1"; 
// const char *sqlStatement = "SELECT * FROM QandA ORDER BY random() LIMIT 1"; 
    sqlite3_stmt *compiledStatement; 

    // sqlite3_stmt *statement; 
    int prepareStatus = sqlite3_prepare_v2(database, [query UTF8String], 
              -1, &compiledStatement, NULL); 
    if (prepareStatus == SQLITE_OK) {... 

你會注意到,我一直使用「字符*」也無濟於事試過(其他的嘗試中)。我的數據庫打開罰款:

databaseName = @"Facts.sqlite"; 
// Get the path to the documents directory and append the databaseName 
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDir = [documentPaths objectAtIndex:0]; 
databasePath = [documentsDir stringByAppendingPathComponent:databaseName]; 
NSLog(@"databasePath = %@", databasePath); 

int dbOpenStatus = sqlite3_open_v2([databasePath UTF8String], &database, SQLITE_OPEN_READWRITE, NULL); 

從我的控制器接口:

NSString *databaseName; 
NSString *databasePath; 

我已經在調試器中檢查,一切看起來不錯,但準備語句失敗。我不知道如何記錄它正在編譯的語句......我認爲/希望這正是我的SELECT所說的。

任何人都可以幫忙嗎?我很絕望。馬克

+0

如果你想進入電影用Objective-C SQLite數據庫,我會建議使用FMDB,https://開頭的github .com/ccgus/fmdb – 2011-02-27 22:11:08

+1

好的,找出(最後)如何得到更詳細的錯誤信息。準備調用的錯誤是「沒有這樣的表:myTableName」。它在那裏,我也記錄了MyDb.sqlite文件的完整路徑。表*是錯誤中顯示的名稱,那麼爲什麼會發生這種情況? – Mark 2011-02-28 00:46:48

+0

檢出FMDB並將在未來考慮它。謝謝。 – Mark 2011-02-28 13:18:37

回答

6

找到了答案here。我不得不使用它代替的路徑DB文件:

[[NSBundle mainBundle]pathForResource:@"Facts"extension:@"sqlite"]; 

這給了一個稍微不同的路徑(一個額外的目錄) - 一旦我用了它的工作!希望這可以幫助別人...我花了很多時間在這個。

+0

簡單而有效。謝謝馬克! – jcpennypincher 2011-09-15 15:22:35

+2

在這裏相同,databasePath爲空..我仍然相信這**如果(sqlite3_open(dbPath,&myDataBase)== SQLITE_OK)**應該返回false,所以錯誤會更容易跟蹤 – codrut 2012-04-12 08:48:35

0

代碼似乎很好,可能是一個愚蠢的問題,但你有創建QandA表內的數據庫?

+0

不會是第一次進行骨頭移動,但是,桌子就在那裏。 – Mark 2011-02-28 13:18:11

1

請注意,上面的內容稍微不準確,ofType應該使用不擴展,並且ofType顯然需要與您的文件擴展名相匹配。

如果您的數據庫名爲 「mysqldatabase.sql」 你的路徑網址變更爲:

databasePath = [[NSBundle mainBundle]pathForResource:@"mysqldatabase" ofType:@"sql"];