【问题标题】:Android: SQLite Not able to delete a specific recordAndroid:SQLite 无法删除特定记录
【发布时间】:2010-08-25 09:29:33
【问题描述】:

我正在尝试通过 Android 应用程序从 SQLiteDB 中删除记录,这是我使用代码删除记录的方式

//我的 DBAdapter 类中的代码片段 公共布尔删除记录(字符串联系人姓名){ Log.i(TAG, "DeleteRecord(String ContactName)"); Log.i(标签,联系人姓名); 返回 db.delete(TABLE_SIMPLETABLE_CLIENT1,KEY_EMPLOYEE_NAME + "=" +联系人姓名,空); }

在另一个类中,我尝试通过打开数据库并调用此方法并再次关闭数据库来调用此方法,这就是我的编码方式,

//我的 DBApplication 类中的代码片段

public void onClick(DialogInterface 对话框, 诠释其中){ DBAdapter.open(); DBAdapter.DeleteRecord(DeleteRecord); //DeletRecord 是 DB(Sivaram) 中的字符串值 DBAdapter.close(); }

当我部署它时,我收到以下错误,

08-25 14:52:20.602: 错误/AndroidRuntime(231): android.database.sqlite.SQLiteException: 没有这样的列: Sivaram: , 编译时: 从 SimpleTable1 中删除 Employee_Name=Sivaram

请帮我找出解决办法

提前谢谢...

【问题讨论】:

  • 这对社区 wiki 来说真的值得吗?

标签: android sqlite


【解决方案1】:
Edit-

试试这个,如果它首先工作,请检查一下

return db.delete(TABLE_SIMPLETABLE_CLIENT1,KEY_EMPLOYEE_NAME + "='"+ContactName+"'",null);

这里你的字符串应该在你的 where 子句中(第三个位置),你只需要提到你的表名作为你的第二个参数,我相信

delete(String tableName, String whereClause, String[] whereArgs) {}
return db.delete(TABLE_SIMPLETABLE_CLIENT1,KEY_EMPLOYEE_NAME,new String[]{ContactName});

【讨论】:

  • 感谢 Rahul,您的努力帮助了我很多,现在一切正常,感谢您的支持......
【解决方案2】:

我认为你传递了一个错误的查询。喜欢

DELETE FROM SimpleTable1 WHERE Employee_Name=Sivaram;

一定是这样的。

DELETE FROM SimpleTable1 WHERE Employee_Name='Sivaram';

检查一下。 ''Text 数据类型所必需的

【讨论】:

  • @Nandagopal T:使用位置参数 (DELETE FROM SimpleTable1 WHERE Employee_Name=?) 是避免犯此错误的好方法。
  • 嗨,伙计们,非常感谢您的出色回复,但是您能告诉我如何在我的示例中使用您的想法吗,因为我尝试使用 db.delete(TABLE_SIMPLETABLE_CLIENT1, KEY_EMPLOYEE_NAME + "=" + '联系人姓名',空); ,我尝试使用这种方式,它显示错误为无效字符常量....请帮助我...
  • 单引号应该在双引号内:db.delete(TABLE_SIMPLETABLE_CLIENT1, KEY_EMPLOYEE_NAME + "= '" + ContactName + "'", null)
【解决方案3】:
public boolean deletename(String rowid) {
  return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowid, null) > 0;
}

试试这个代码,它对我来说工作正常。它使用唯一的行 ID 删除记录。其中 row 是我的主键。

现在,如果您想使用除 rowid 之外的任何其他内容进行删除。

试试这个

public boolean deletename(String eid) {
    getrowid(eid);
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + zCursor.getString(0).toString(), null) > 0;
}
public Cursor getrowid(String e_id) throws SQLException {
  //System.out
   // .println("---------------================Employee ID:" + e_id);
  zCursor = db.query(true, DATABASE_TABLE, new String[] { KEY_ROWID },
    KEY_EID + "= ?", new String[] { e_id.toString() }, null, null,
    null, null);
  if (zCursor != null) {
   zCursor.moveToFirst();
   //System.out.println("---------------================"
    // + zCursor.getString(0));
  }
  return zCursor;
 }

我在这里使用employeeid 删除我的员工记录。所以我找到了唯一的 rowid,这是我给定记录的主键,然后删除记录。

【讨论】:

  • 谢谢伙计们,由于您的回复,它对我也很有用。非常感谢...
【解决方案4】:

你可以编写下面的查询来删除记录,通过将数据作为字符串进行paasing,并基于此你可以从数据库中的表中删除记录

// delete a title by string name specified
public Cursor deleteTitle(String i) 
{
    return db.query(true, DATABASE_TABLE, new String[] { Key_RowID },
      Key_Name + "= ?", new String[] { Key_Name.toString() }, null, null,
      null, null);
}

您的 qyery 的问题是您尚未将数据库中的名称字段转换为字符串,即 Key_Name.toString()

试试这个可能会有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2013-09-14
    相关资源
    最近更新 更多