2010-06-17 133 views
1

我試圖做一個簡單的應用程序,存儲和顯示閃存卡,但我有一段糟糕的時間讓我的SQLite工作。數據庫連接是好的,但是當我嘗試插入時,它會崩潰並且沒有指出哪裏出了問題。這是我用來將閃存卡插入表中的代碼。iPhone應用程序崩潰與sqlite3_bind_text()

const char *insert = "INSERT OR REPLACE INTO LIST (TERM, DEFINITION) VALUES (?, ?);"; 
sqlite3_stmt *statement; 
sqlite3_prepare_v2(database, insert, -1, &statement, nil); 
sqlite3_bind_text(statement, 1, [term UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_bind_text(statement, 2, [def UTF8String], -1, SQLITE_TRANSIENT); 
sqlite3_step(statement); 
sqlite3_finalize(statement); 

我確定綁定文本方法是我之前放置的一些NSLog()方法的薄弱環節。在這個例子中,term和def是NSStrings,確實保持正確的值(我知道這很確定)。任何幫助,將不勝感激。我還沒有掌握便攜式c。

+0

如果您使用的是包裝器,則不會遇到此問題:http://code.google.com/p/flycode/source/browse/#svn/trunk/fmdb – 2010-06-17 20:19:27

+1

或者僅使用核心數據;除非必須與非電話/ Mac機器共享數據庫,否則使用CoreData的原因有很多。 – bbum 2010-06-17 21:07:09

回答

2

不是100%,爲什麼它不工作,但我有一些事情要提示:

擺脫的;在插入聲明的最後,我從來沒有在我的。

把準備並步入一個if語句,像這樣

if(sqlite3_prepare_v2(db, sql, -1, &statement, NULL) != SQLITE_OK) { 
     NSAssert1(0, @"Error while creating add statement. '%s'", sqlite3_errmsg(db)); 
} 
if (SQLITE_DONE != sqlite3_step(statement)) { 
     NSAssert1(0, @"Error while inserting data. '%s'", sqlite3_errmsg(db)); 
} 

無的,這可能幫助,但它可能讓你更接近,以什麼是錯。

此外,有一件事可能會有所幫助。當我一直在使用SQLite時,如果我對數據庫進行了更改或者我沒有正確輸入數據,那麼它會非常痛苦。我花了很多時間重新設置iPhone模擬器並清理構建版本