2010-11-18 21 views
0

私はFMDBを使用してSQLiteデータベースとインターフェイスしています。私は行を正常に挿入することがありますが、私は試して、それらの1つを更新すると、UPDATEは発生しませんが、エラーは報告されません。UPDATEはFMDBで動作せず、sqliteコマンドラインでうまく動作します

は、ここで私がやっているものです:

userHistoryDB.logsErrors = YES; 
userHistoryDB.traceExecution = YES; 
NSString *query = [NSString stringWithFormat: 
     @"INSERT OR IGNORE INTO phrase_history (code, %@) VALUES (\"%@\", 0); " 
     @"UPDATE OR FAIL phrase_history SET %@ = %@ + 1 WHERE code = \"%@\";", 
     countTypeColumn, 
     phraseCode, 
     countTypeColumn, 
     countTypeColumn, 
     phraseCode]; 
BOOL rc = [userHistoryDB executeUpdate:query]; 

RCは何も間違ってないことを示すために、YESです。ここに例があります:

<FMDatabase: 0x5303af0> executeUpdate: INSERT OR IGNORE INTO phrase_history (code, presented) VALUES ("grapefruit", 0); UPDATE OR FAIL phrase_history SET presented = presented + 1 WHERE code = "grapefruit"; 

FMDBに関する限り、これは問題なく実行されています。ただし、レコードは増加しません。 SQLには何も問題はありません。sqlite3コマンドラインツールに貼り付けると、完全に動作します。

なぜそれが実行されていないかに関するアイデアはありますか?

  • を(すでに手動で挿入エントリで)だけで更新を実行するexecuteQuery
  • を使用して、実行中のトランザクションで
  • を行を囲む:私は無駄にしようとしているもの。
  • スラミングヘッドを机に押し付ける。

答えて

3

ここには2つのsqlite文があり、FMDBは1つの複合行を2つの独立した文に自動的に変換しません。別々に実行する必要があります。これは、sqlite3コマンドラインツールが実行している処理です。

+0

私はこれが当てはまるとは思わない。私はちょうどUPDATEを実行しようとしました(エントリはすでにそこにあります)、私は同じ結果を得ます。また、他の複数行のSQLクエリでもFMDBは問題ありません。 –

+0

私はそれを後退させる、あなたは完全に正しい。私はこれを試してみたと思ったが、明らかにいくつかの性行為の叫び声が入ってきた。ありがとう、恩恵を楽しむ! –

+0

@coob賞金を割り当てるだけでなく、回答を受け入れる必要があることを忘れたり、紛失したりすることを忘れないでください。 –

0

あなたのデータベースはどこに保存されていますか?バンドルで?または他の場所で?

データベースがプロジェクトフォルダにある場合、コンパイル時にXcodeはビルド/デバッグまたはビルド/リリースでアプリケーションバンドルを作成します。これは、プロジェクトフォルダ内のデータベースではなくデータベースの場所です。ビルド/デバッグ(リリース)のデータベースが更新されているかどうかを確認しますか?プロジェクトフォルダ内のデータベースは、アプリケーションバンドルの場所をリクエストする可能性があるため、更新されません。

コマンドラインでデータベースをチェックするときに、プロジェクトバンドルまたはビルド/デバッグ(リリース)フォルダのデータベースをチェックしましたか?

+0

DBはDocumentsフォルダに格納されています。私が質問したように、INSERTに問題はありませんでした。 –

関連する問題