2016-07-08 11 views
0

エラー構文例外

android.database.sqlite.SQLiteException: near ",": syntax error (code 1): , while compiling: DELETE FROM messages_table WHERE (time,recepient_id,sender_id) IN (("1469945224502","8c79c7d4bf2c11e38867e83935244df8","0a0897ceed5a11e38867e83935244df8"),("1466672473543","8c79c7d4bf2c11e38867e83935244df8","0a0897ceed5a11e38867e83935244df8")) 
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887) 
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498) 
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1496) 
at $JUST_MY_CLAS_NAME$6.run(BasicDAO.java:136) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
at java.lang.Thread.run(Thread.java:818) 

それは何の原因になることができますか?

サーバデータベースでエラーなく実行されますが、Androidの場合はに失敗します。

問題:私はデータベースから多くのデータを削除する必要があります。 私はPOJOリストの形式でデータを取得しています。だから私は動的にクエリを作成する必要があります。これは問題を実証するための単純なケースです。

おそらく、これは最適な方法ではないでしょう。提案や特にドキュメントは高く評価されます。

答えて

2

In SQLite

INとNOT演算子INは右に左とベクトルオペランド上の単一のスカラオペランドを取ります。

ですから、比較を書き出す必要があります:

DELETE FROM messages_table 
WHERE (time   = '1469945224502'     AND 
     recepient_id = '8c79c7d4bf2c11e38867e83935244df8' AND 
     sender_id = '0a0897ceed5a11e38867e83935244df8') 
     OR 
     (time   = '1466672473543'     AND 
     recepient_id = '8c79c7d4bf2c11e38867e83935244df8' AND 
     sender_id = '0a0897ceed5a11e38867e83935244df8'); 
+0

グレートを、これはほぼ完璧な答えのように見えています。私はあなたの上司のための証明を持っているので、どこにドキュメントを読むべきか教えてください。長いリストをループして各アイテムを別々に削除したり、そのリストからデータベースに長いキューを作成して一度実行したりする方が早いか教えてください。私は他の人が見つけることができるように私の質問に名前を付ける方法を考えるでしょう。そして私はあなたの答えを受け入れるでしょう。 –

+0

これを最適化する方法は別の質問です。 –

+0

あなたは正しいです。ありがとうございました。 –

関連する問題