我的 SQL 类中有以下方法:
public void deleteEntry(int idnum) {
dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = 0", null);
}
我通常给它一个,idnum
但出于测试目的,我只是把一个 0 放在那里。语法明智,有什么理由为什么这不起作用?我什么都试过了。
假设这KEY_ROWID
是一个自动递增的主键,您输入的第一条记录将具有 value 1
,而不是0
。
话虽如此,您的delete
方法不起作用的原因很可能是因为没有 value 记录0
。
如果我是你,我会卸载并重新安装你的应用程序并从头开始。要么,要么adb
用来分析你的 SQLite 数据库的内容(使用模拟器,如果你没有根设备)。您可以在磁盘上/data/data/[package name]/databases/database_name.db
(或类似的位置)找到数据库文件。
找出为什么事情在这一点上不起作用的最好方法是分析数据库的内容。否则,您将只是猜测和检查,直到某些东西似乎起作用……即使那样,您也可能无法确定您的实现是否 100% 正确。
作为使用模拟器和/或根设备分析数据库文件的替代方法,您可以对数据库中的所有数据执行查询,然后使用类中dumpCursor
提供的方法DatabaseUtils
打印 to 的Cursor
内容System.out
。
你应该使用这个版本,
public void deleteEntry(int idnum) {
dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = ?", new String[] {"0"});
}
使用0
它可能无法正常工作,因为如果该列是INTEGER
并且AUTOINCREMENT
它将开始以更大的值计数,0
因此没有0
要删除的 KEY_ROWID 行。
改成,
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 并返回与该条目关联的名称,并且它现在成功删除了相应的项目。