gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 08:01:17 25 4
gpt4 key购买 nike

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

这是我正在尝试的代码。

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);

解决方案正如 laalto 所回答的那样

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com