2009-06-27 25 views
3

成功した場合、SQLiteのステートメント "insert"は何を返しますか?SQLiteの "insert"はSQLITE_OKまたはSQLITE_DONEを返しますか?

は、私はいつもそれがSQLITE_DONEあるべきと考えますが、最近、私のログに、私は次の文字列を発見:

sqlite3_step error: 'not an error' 

そして、ここで言及した文字列ログインするコードです:

prepareStatement(addTranslationStmt2, "INSERT INTO translations(lang1_wordid, lang2_wordid) VALUES(?, ?)"); 
if (!addTranslationStmt2) return -2; 

sqlite3_bind_int(addTranslationStmt2, 1, word_id); 
sqlite3_bind_int(addTranslationStmt2, 2, translation_id); 

if(sqlite3_step(addTranslationStmt2) != SQLITE_DONE) 
{ 
    NSLog(@"sqlite3_step error: '%s'", sqlite3_errmsg(database)); 
    sqlite3_reset(addTranslationStmt2); 
    return -1; 
} 

sqlite3_reset(addTranslationStmt2); 

を私は疑問に思っています、なぜそれはほとんどの場合に機能しますか? コード内のSQLITE_DONEをSQLITE_OKに変更する必要がありますか?

ありがとうございました。

+1

エラーコードを印刷すると、何が表示されましたか? –

+0

http://code.google.com/p/database-adt/を確認してください – Macarse

答えて

3

これらの場合、私はコードサンプルを見るのが好きです。ここではいくつかの良いものは、次のとおりです。

http://sqlite.phxsoftware.com/forums/p/76/6659.aspx

SQLite Result Codes Referenceリストは、成功した結果を示すものとしてSQLITE_OK。それはまた、エラーコード0を有する最初のエラーコードであり、それを標準的な結果(すなわち、正常な動作に期待する結果)とする。

は、あなたはそれが本当にゼロを返しているかどうかを確認するためにあなたのコードにブレークポイントまたはprint文を入れて、あなたが期待する結果を取得していることを確認するために、データをチェックする必要があります。それがすべてチェックアウトされたら、SQLITE_OKをチェックするために条件を変更します。 sqlite3_step()インターフェイスの動作の

詳細は文が新しい「V2」インターフェースsqlite3_prepare_v2()sqlite3_prepare16_v2()または古いレガシーインターフェースsqlite3_prepare()とレガシーインターフェースで

sqlite3_prepare16().、戻り値を用いて調製したかどうかに依存しますSQLITE_BUSY, SQLITE_DONE, SQLITE_ROW, SQLITE_ERRORまたはSQLITE_MISUSEのいずれかになります。 "v2"インターフェースでは、他の結果コードまたは拡張結果コードのいずれかが返されることがあります。 「リリース」は私のために問題を解決するには、「デバッグ」設定から切り替え

関連する問題