更新查询在Android中不起作用
我试图更新SqLite数据库中的两个字段,但它不起作用LogCat中没有显示异常,但在获取值时,我无法获取这两个特定字段的任何值 这是我正在尝试的代码更新查询在Android中不起作用,android,sqlite,Android,Sqlite,我试图更新SqLite数据库中的两个字段,但它不起作用LogCat中没有显示异常,但在获取值时,我无法获取这两个特定字段的任何值 这是我正在尝试的代码 try{ SQLiteDatabase db = openOrCreateDatabase("iTimeDB", MODE_PRIVATE, null); Cursor cur =db.rawQuery("UPDATE Activities SET Details = '"+ detail_edit.getText().toString(
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 = '" + 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)
其中,将parens中表达式的结果放入第一列,而不修改第二列
要更新多个列,请使用,
分隔它们:
UPDATE foo SET bar=1,baz=2
尝试此操作,但没有更新相同的结果
db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null);
db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null);
还要检查WHERE
条件是否实际匹配。您正在将ID
匹配为字符串文字,我相信您希望它不带“
引号,而是匹配为整数
在这种情况下,您的代码有一个SQL注入漏洞:直接将用户输入的字符串放入SQL。在SQL中使用?
,您可以在bindArgs
中使用文本并传入参数:
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)
其中,将parens中表达式的结果放入第一列,而不修改第二列
要更新多个列,请使用,
分隔它们:
UPDATE foo SET bar=1,baz=2
尝试此操作,但没有更新相同的结果
db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null);
db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null);
还要检查WHERE
条件是否实际匹配。您正在将ID
匹配为字符串文字,我相信您希望它不带“
引号,而是匹配为整数
在这种情况下,您的代码有一个SQL注入漏洞:直接将用户输入的字符串放入SQL。在SQL中使用?
,您可以在bindArgs
中使用文本并传入参数:
db.execSQL("UPDATE Activities SET Details = ?, Time = ? WHERE ID = " + ID,
new String[] {
detail_edit.getText().toString(),
Ctime
});
使用以下命令:
public void updateBattingFieldingData(int gameId, int batterTeamId,
int fielderTeamId) {
String string = " SELECT * FROM " + GAME_LIST_TABLE + " WHERE "
+ KEY_GAME_ID + " = " + gameId;
ContentValues values = new ContentValues();
values.put(KEY_BATTING_TEAM, batterTeamId);
values.put(KEY_FIELDING_TEAM, fielderTeamId);
db.update(GAME_LIST_TABLE, values, KEY_GAME_ID + " = " + gameId, null);
}
使用以下命令:
public void updateBattingFieldingData(int gameId, int batterTeamId,
int fielderTeamId) {
String string = " SELECT * FROM " + GAME_LIST_TABLE + " WHERE "
+ KEY_GAME_ID + " = " + gameId;
ContentValues values = new ContentValues();
values.put(KEY_BATTING_TEAM, batterTeamId);
values.put(KEY_FIELDING_TEAM, fielderTeamId);
db.update(GAME_LIST_TABLE, values, KEY_GAME_ID + " = " + gameId, null);
}
我已经按照您的建议更新了代码,但结果相同。。。检查问题中的更新我已按照您的建议更新了代码,但结果相同。。。检查有问题的更新