2011-07-30 11 views
4

私はSQLiteデータベースの行を削除しようとするとかなり簡単なコマンドを使用しています。ただし、コマンドを正常に実行した後、行はDBに残っています!Android sqlite deleteは実際に行を削除しない

SQLiteDatabase dbinst = mydb.getWritableDatabase(); 

try 
{ 
    dbinst.beginTransaction(); 
    int del = dbinst.delete("sms", "wassent = ? or waserror = ? or wasaborted = ?", new String[] {"1", "1", "1"}); 
    clog.debug("Rows deleted: " + del); 
    dbinst.setTransactionSuccessful(); 
} 
catch(Exception e) 
{ 
    clog.error(e.toString(),e); 
} 

dbinst.close(); 

ロガーには「行が削除されました:3」と表示され、例外は発生しません。しかし、すぐ後にクエリを実行すると、行はまだそこにありますか?

ここで間違っていることは何ですか?

+0

あなたはこれを解決しましたか? –

答えて

1

実際に変更をコミットするには、endTransactionに電話する必要があります。詳細はこちらをご覧ください:beginTransaction() documentation

+0

単純な削除のためにトランザクションを実際に使用することは、どのような場合でも役立ちますか?そして削除する複数の行を持つ単一の削除についてはどうですか?パフォーマンスが向上しているかスレッドセーフで済みますか? –

+0

@androiddeveloperトランザクションは、いくつかのテーブルをアトミックに更新する(すべての更新が機能するか、すべてが失敗し、結果が混在しない)場合に便利です。また、アプリケーションが、テーブル更新の途中でバッテリーを引っ張るユーザーを処理できない場合は、トランザクションを使用します。 –

+0

が理にかなっています。削除操作が単一の行だけであることがわかっている場合に便利ですか?複数の行はどうですか?トランザクションを持たない削除を使用すると、スレッドセーフティの面で危険ですか?つまり、この "db.delete(...)"スレッドセーフですか? –

関連する問題