2

我的 SQL 类中有以下方法:

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

我通常给它一个,idnum但出于测试目的,我只是把一个 0 放在那里。语法明智,有什么理由为什么这不起作用?我什么都试过了。

4

5 回答 5

4

假设这KEY_ROWID是一个自动递增的主键,您输入的第一条记录将具有 value 1,而不是0

话虽如此,您的delete方法不起作用的原因很可能是因为没有 value 记录0


编辑#1:

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

找出为什么事情在这一点上不起作用的最好方法是分析数据库的内容。否则,您将只是猜测和检查,直到某些东西似乎起作用……即使那样,您也可能无法确定您的实现是否 100% 正确。


编辑#2:

作为使用模拟器和/或根设备分析数据库文件的替代方法,您可以对数据库中的所有数据执行查询,然后使用类中dumpCursor提供的方法DatabaseUtils打印 to 的Cursor内容System.out

于 2012-05-28T06:17:47.370 回答
2

你应该使用这个版本,

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

使用0它可能无法正常工作,因为如果该列是INTEGER并且AUTOINCREMENT它将开始以更大的值计数,0因此没有0要删除的 KEY_ROWID 行。

于 2012-05-28T06:11:29.360 回答
1

改成,

public void deleteEntry(int idnum) {
      dbSQL.delete(DATABASE_TABLE, KEY_ROWID+"=?", new Integer[]{idnum});
}
于 2012-05-28T06:07:08.303 回答
1

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

public void deleteEntry(int idnum) {
     dbSQL.delete(DATABASE_TABLE, KEY_ROWID + " = '0'", null);
}
于 2012-05-28T06:13:41.123 回答
0

感谢大家的帮助,但我只是使用我构建的方法获得了一些运气,该方法获取 id 并返回与该条目关联的名称,并且它现在成功删除了相应的项目。

于 2012-05-28T06:24:38.933 回答