2

のようなステートメントを実行したい

UPDATE myTable SET myField = myField + 1

Android SQLite データベースで。(はい、すべてのレコードの myField を増やしたいです。)

私の最初のアイデアは を使用することでしたexecSQLが、ドキュメントには次のように記載されています。

SELECT/INSERT/UPDATE/DELETE ではない単一の SQL ステートメントを実行します。

...

UPDATE ステートメントの場合は、代わりに次のいずれかを使用します。
• update(String, ContentValues, String, String[])
• updateWithOnConflict(String, ContentValues, String, String[], int)

ただし、私が見る限り、このタイプの UPDATE はSQLiteDatabase.updateメソッドでは実行できません。これを行うための巧妙なトリックを見逃しSQLiteDatabase.updateたのですか、それともドキュメントが壊れていますか? (上記の SQL を execSQL で実行すると問題なく動作しますが、ドキュメントではそうではないと主張しています。)

4

2 に答える 2

2

その方法で十分です。基礎となるC APIはそれらを区別しないため、そうでなければなりません。値を返さないステートメントは、 で実行できますexecSQL

update* と* は正当なヘルパー メソッドですが、insertすべての挿入/更新に使用する必要があると主張していなければ、ドキュメントは本当にうまくいくでしょう (これまでに使用insert into table select ...したことがありますか? 私はいつもそうしています!)

于 2012-11-06T15:02:45.880 に答える
1

このexecSQL場合、何も返さないため、は正常に機能します。私は自分のアプリケーションの1つで同じ目的でそれを使用していますが、問題を経験したことはありません。

于 2012-11-06T15:16:28.330 に答える