結論: AndroidのデータベースAPI の作業がドキュメントはひどく不完全です。Sqlite:SqliteDatabase.delete()対未処理クエリ
私は最近、原因sqliteは、テーブルを作成するときに、データ型を指定するように強制しないことによって提供して柔軟性に脳の解体状況に遭遇してきました。問題は私の考え方であり、指定されていなければすべてのデータ型が一般的な文字列であると仮定し、したがってデータベースとの対話方法はjava.lang.String
です。
しかし、あなたは以下のようなメソッドを見たとき、あなたはどちらか私を責めることはできない。
int delete (String table,
String whereClause,
String[] whereArgs)
SqlDatabase
クラスでAndroid docsから。
Iは電話番号(Iはjava.lang.String
として格納されていること)と長いフィールドとしてタイムスタンプからなるテーブルを有しています。このメソッドを使用してレコードを削除しようとしたとき、無数のデバッグにもかかわらず削除されたことはありません。
私はすべてをチェックして、テーブルが存在し、すべてのチェックリストが偶然になるまで、上記の方法を使用する代わりに生の方法でクエリを実行している間にタイムスタンプを取り除くと、
DELETE FROM messages_records_table WHERE messageTimestamp = 1508494606000;
代わりに以下の:
DELETE FROM messages_records_table WHERE messageTimestamp = '1508494606000';
または、
DELETE FROM messages_records_table WHERE messageTimestamp = "1508494606000";
このような何か
電話番号は問題ありません。
したがって、引用符を削除して(文字列/ varchar型で必要な)生の削除クエリを実行しようとしましたが、削除に成功しました。ここで注目すべき重要なことは、Object[]
がdelete()
に比べString[]
と異なっていることである
db.execSQL(String sql, Object[] whereArgs)
:私は、このために、以下の方法を使用していました。私はそれを動作させるためにオブジェクトにロングを渡したが、Long.toString()
をdelete()
に渡すことは役に立たないようだ。
私の分析は正しいですか?delete()
APIは基本的に役に立たないですか、もっと大きな画像を見逃してしまったのですか?それ以来、Androidチームは慎重に提供していますか?
あなたは 'DELETE'のために使用される実際のコードを含めることができます's – MikeT