SQL クラスに次のメソッドがあります。
public void deleteEntry(int idnum) {
dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = 0", null);
}
通常は を指定しますidnumが、テスト目的で 0 を指定しました。構文に関して、これが機能しない理由はありますか? 私はすべてを試しました。
KEY_ROWIDが自動インクリメント主キーであると仮定すると、入力する最初のレコードの値1は ではなくになり0ます。
そうは言っても、メソッドが機能しない理由deleteは、 value を持つレコードがないためである可能性が最も高いです0。
私があなたなら、あなたのアプリをアンインストールして再インストールし、最初からやり直すでしょう。またはadb、SQLite データベースの内容を分析するために使用します (root 化されたデバイスがない場合は、エミュレーターを使用します)。データベースファイルは、ディスク上の/data/data/[package name]/databases/database_name.db(またはそのような場所) にあります。
この時点でうまくいかない理由を突き止める最良の方法は、データベースの内容を分析することです。それ以外の場合は、何かが機能するように見えるまで推測してチェックするだけです...そして、それでも実装が100%正しいかどうかはおそらくわかりません.
エミュレーターやルート化されたデバイスを使用してデータベース ファイルを分析する代わりに、データベース内のすべてのデータに対してクエリを実行し、クラスdumpCursorで提供されているメソッドを使用してtoの内容を出力できます。DatabaseUtilsCursorSystem.out
このバージョンを使用する必要があります。
public void deleteEntry(int idnum) {
dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = ?", new String[] {"0"});
}
0列がある場合、INTEGERそれAUTOINCREMENTよりも大きな値でカウントを開始するため、削除するKEY_ROWIDを0持つ行がないため、おそらく機能しません0。
に変更します。
public void deleteEntry(int idnum) {
dbSQL.delete(DATABASE_TABLE, KEY_ROWID+"=?", new Integer[]{idnum});
}
KEY_ROWID 列が文字列である場合は、使用する必要があります
public void deleteEntry(int idnum) {
dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = '0'", null);
}
皆さんの助けに感謝しますが、IDを取得してそのエントリに関連付けられた名前を返し、対応するアイテムを正常に削除するように作成したメソッドを使用するだけで、運が良かったです。