Java Android SQLite删除不更改任何内容

Java Android SQLite删除不更改任何内容,java,android,sqlite,Java,Android,Sqlite,我的SQL类中有以下方法: public void deleteEntry(int idnum) { dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = 0", null); } 我通常给它一个idnum,但出于测试目的,我刚刚在那里放了一个0。在语法方面,有什么原因导致这不起作用吗?我什么都试过了。换成 public void deleteEntry(int idnum) { dbSQL.delete(DATABASE_TABLE,

我的SQL类中有以下方法:

public void deleteEntry(int idnum) {
     dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = 0", null);
}
我通常给它一个
idnum
,但出于测试目的,我刚刚在那里放了一个0。在语法方面,有什么原因导致这不起作用吗?我什么都试过了。

换成

public void deleteEntry(int idnum) {
      dbSQL.delete(DATABASE_TABLE, KEY_ROWID+"=?", new Integer[]{idnum});
}

你应该使用这个版本

public void deleteEntry(int idnum) {
     dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = ?", new String[] {"0"});
}

对于
0
它可能不起作用,因为如果列是
INTEGER
AUTOINCREMENT
,它将开始以大于
0
的值计数,因此没有一行具有要删除的键ROWID
0

如果您的键ROWID列是字符串,则必须使用

public void deleteEntry(int idnum) {
     dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = '0'", null);
}

假设
KEY\u ROWID
是一个自动递增的主键,那么您输入的第一条记录将具有值
1
,而不是
0

也就是说,
delete
方法不起作用的原因很可能是因为没有值为
0
的记录


编辑#1:
如果我是你,我会卸载并重新安装你的应用程序,然后从头开始。或者使用
adb
分析SQLite数据库的内容(如果没有根设备,则使用模拟器)。您可以在磁盘上的
/data/data/[package name]/databases/database_name.db
(或类似的地方)找到数据库文件


要想弄清楚为什么此时一切都不正常,最好的方法是分析数据库的内容。否则,你将只是猜测和检查,直到有东西似乎工作。。。即使这样,您也可能无法确定您的实现是否100%正确


编辑#2:
作为使用emulator和/或根设备分析数据库文件的替代方法,您可以对数据库中的所有数据执行查询,然后使用类中提供的方法将
光标的内容打印到
系统。out

谢谢大家的帮助,但我有点运气,因为我使用了一个我构建的方法,该方法获取了id并返回了与该条目相关联的名称,它现在成功地删除了相应的项。

是否有KEY\u ROWID=0的数据?您是如何检查的,没有任何更改。如果您的KEY\u ROWID是自动编号,则从1开始,不是0。@KKD我试图让它删除KEY_ROWID为0的行。我知道这是存在的,我正在测试。KEY\u ROWID是一个表示“\id”(数据库中的主键列)的字符串,它也不会删除该行。@MarkLyons您是否从数据库打印了
KEY\u ROWID
值,是否有一行
KEY\u ROWID
的值?我知道KEY\u ROWID为0的行,所以我用它来测试。实际上,idnum参数是要删除的参数,如果这样做更容易的话。@MarkLyons For
idnum
您可以像这样使用我的版本:
newstring[]{”“+idnum}
。您是否打印了数据库的行以查看数据库中的实际数据?我的答案中的代码是正确的,如果有要删除的内容,它应该删除一个值。你确定。。。?我相信
SQLiteDatabase
实现将为您格式化
WHERE
子句,只要您传递方法a
String
。该方法的主体出现了“无效字符常量”错误。现在您将
0
视为字符串,而不是int?怎么会更好?@Rasel,没有变化:(.KEY_ROWID列在表中设置为:
INTEGER主键自动递增
,这会改变什么吗?@Alex Lockwood。请参阅作者的评论。他通过保留列字符串来测试这一点。这就是为什么不删除带有0的行。我尝试了一些带有1的方法,但没有任何区别。如果我是你,我会取消列表全部并重新安装你的应用程序,然后重新开始。或者,或者使用
adb
分析你的SQLite数据库的内容。你可以在
/data/data/[package name]/databases/database_name.db
(或者类似的地方)找到它。如果您没有根设备,则使用仿真器来调试它。要想找出目前不起作用的原因,最好的方法是分析数据库的内容……否则,您只能猜测和检查,直到某个设备似乎起作用……即使这样,您也可能无法确定它是否100%正确请记住,仅仅因为你为手头的任务找到了解决方法,并不意味着你的代码仍然没有问题。安全总比后悔好。。。