android - 更新查询在 Android 中不起作用

标签 android sqlite

我正在尝试更新 SqLite 数据库中的两个字段,但它不起作用,LogCat 中没有显示任何异常,但在获取值时我无法获取这两个特定字段的任何值。

这是我正在尝试的代码。

try{
SQLiteDatabase db = openOrCreateDatabase("iTimeDB", MODE_PRIVATE, null);
    Cursor cur =db.rawQuery("UPDATE Activities SET Details = '"+ detail_edit.getText().toString() +"' AND Time = '"+Ctime+"' WHERE ID = '" +ID+"'", null);
    Log.d("Time", ID);
    cur.close();
    db.close();
     }
     catch(Exception e)
     {
     e.printStackTrace();
     Log.v("SSS", e.toString());
     }

我也尝试过单独更新这些字段,但出现同样的问题。

尝试过这个,但结果相同,没有更新

db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null);

解决方案 正如拉阿尔托所问的

db.execSQL("UPDATE Activities SET Details = ?, Time = ? WHERE ID = " + ID,
    new String[] { 
        detail_edit.getText().toString(),
        Ctime
    });

最佳答案

rawQuery() 仅编译 SQL,但不执行它。使用 execSQL() 来编译和运行 SQL。

此外,您还有一个 SQL 语法问题,但不会导致语法错误:

UPDATE foo SET bar=1 AND baz=2

确实

UPDATE foo SET bar=(1 AND baz=2)

其中括号中的表达式的结果被放入第一列,第二列不被修改。

要更新多列,请用 , 分隔它们:

UPDATE foo SET bar=1,baz=2

Tried this but same result no update

db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null);

还要检查 WHERE 条件是否实际匹配。您将 ID 作为字符串文字进行匹配,我相信您希望它不带 ' 引号来匹配为整数。

尽管如此,您的代码存在 SQL 注入(inject)漏洞:直接将用户输入的字符串放入 SQL 中。在 SQL 中使用 ?,您可以使用文字并在 bindArgs 中传入参数:

db.execSQL("UPDATE Activities SET Details = ?, Time = ? WHERE ID = " + ID,
    new String[] { 
        detail_edit.getText().toString(),
        Ctime
    });

关于android - 更新查询在 Android 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20969904/

相关文章:

java - 使用 SimpleDateFormat 无法解析的日期

java - android.support.v7.widget.GridLayoutManager$LayoutParams 无法转换为 android.widget.LinearLayout$LayoutParams

java - 我为本地 sqlite 数据库创建了应​​用程序,但它没有运行。请告诉我解决方案

android - Android中单个项目的JSON解析器

android - Android 上的 Live555

android - 在上传到 android 中的 playstore 之前管理数据库

database - 如何预填充 sqlite 数据库?

php - 如何在 Ubuntu 13.10 上安装 PHP PECL 扩展 "SQLite"

java - 进度对话框 : android. view.WindowLeaked:已泄漏最初在此处添加的窗口 DecorView@6995336[]

android - 如何将 ImageView 移动到另一个 ImageView Android 动画