【问题标题】:Unable to delete row from SQLite DB via delete() - Android无法通过 delete() 从 SQLite DB 中删除行 - Android
【发布时间】:2016-07-26 10:10:08
【问题描述】:

我有一个带有 3 个表的 sqlite 数据库。表 1、表 2 和表 3。

我正在使用以下 API 从数据库中删除行:

int rowsAffected = db.delete(tableName, "columnName=?", new String[] {String.valueOf(shoeId)});

现在,当我为 TABLE1 和 TABLE2 运行此 API 时,行会被很好地删除,并且我在 rowsAffected 中得到正确的数字。但是当我将此 API 用于 TABLE3 时,我总是将 rowsAffected 设为 0,并且没有删除任何条目。

int rowsAffected = db.delete(tableName, "columnName=?", new String[] {String.valueOf(shoeId)});

所有 3 个表都有 shoeId 列。

有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 您是否检查过您获得并传递的哪个 shoeId 包含该表
  • 你有没有给任何外键?
  • 删除方法不应该像int delete (String table, String whereClause, String[] whereArgs)?但是您似乎将表的名称放入约束中。所以这应该会导致类似“DELETE FROM”+ tableName +“WHERE TABLE3”的查询

标签: android sqlite android-sqlite sql-delete


【解决方案1】:

第二个参数是where子句,所以你的查询应该是这样的:

int rowsAffected = db.delete(tableName, "nameOfColumn=?", new String[] {String.valueOf(shoeId)}); 

这意味着:"DELETE FROM tableName WHERE nameOfColumn = String.valueOf(shoeId)"

不要删除=?,它用于准备好的语句

【讨论】:

  • 抱歉,这只是一个错字。实际代码确实有 =?列名旁边。
【解决方案2】:

由于以下原因,上述查询无法正常工作:

  • 假设这里的 columnName 是 busTicketId,它的数据类型是 Int。
  • 创建数据库时,由于创建表查询中的错误,busTicketId 被错误地创建为默认字符串类型。
  • 结果到了删除busTicketId的时候,它试图搜索busTicketId,它是Int类型的,由于找不到,所以受影响的行数总是为0。

一旦在创建表时修复了此列的数据类型问题,此问题也得到了修复。

【讨论】:

    猜你喜欢
    • 2018-02-11
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多