【问题标题】:Can not Update Sqlite Database with Cursor and Calling onClickListener无法使用光标和调用 onClickListener 更新 Sqlite 数据库
【发布时间】:2017-08-11 11:00:11
【问题描述】:

这是 DatabaseHelper 上的方法光标;

public Cursor updateNewQuiz(int n, String s) {
    return getWritableDatabase().rawQuery("UPDATE tb_characters SET LOCKED = '" + s + "' WHERE ID = '" + n + "'", null);
}

 public Cursor updateThisQuiz(int n) {
    return getWritableDatabase().rawQuery("UPDATE tb_characters SET ANSWERED = '1' WHERE ID = '" + n + "'", null);
}

而且,我正在像这样在 Acticity 中调用 OnClickLIsener

int nn = Integer.parseInt(resultes0);
int s = Integer.parseInt(resultes0);
Cursor cursor = myDb.updateNewQuiz(nn+1,"1");
Cursor cursor1 = myDb.updateThisQuiz(s);

但是,我的数据库仍然没有更新...

请帮帮我....

【问题讨论】:

  • 数据库中的ID是字符串还是数字?
  • 数据库中的ID是INTEGER...,resultes0是来自数据库ID的getExtras.String..
  • 为什么要在值周围加上引号?
  • 因为我想在更新数据库时始终将值设置为“1”SET LOCKED = '" + s + "'...我对此感到非常困惑...因为 LogCat 是不显示错误...
  • rawQuery() 用于 SQL 查询 (SELECT)。对于 SQL 命令(其他所有命令),请改用 execSQL()。它不返回任何东西。除此之外,正如@CL 所说,如果您将 strings 传递给它们,则 numeric 值不匹配。

标签: android sqlite sql-update android-sqlite


【解决方案1】:

documentation 说:

字符串常量由单引号 (') 括起来形成。

所以... WHERE ID = '" + n + "' ... 搜索具有字符串作为 ID 的行。没有这样的行,所以没有任何更新。

在 SQL 中,你必须写不带引号的数字:

... WHERE ID = " + n + " ...

此外,您必须使用execSQL() 来执行不是 SELECT 查询的语句。

改用update() 可能更好:

ContentValues cv = new ContentValues();
cv.put("LOCKED", 1);
db.update("tb_characters", cv, "ID = " + n, null);

【讨论】:

  • 数据库未更新...,我的公共光标有问题吗?或者什么...我不知道...
猜你喜欢
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2021-04-07
  • 2021-12-19
  • 2013-05-29
相关资源
最近更新 更多