更新查询无法在Android中运行

时间:2014-01-07 11:00:21

标签: 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
    });

2 个答案:

答案 0 :(得分:4)

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

同时检查WHERE条件是否实际匹配。您将ID与字符串文字进行匹配,我相信您希望在没有'引号的情况下将其匹配为整数。

在那里,您的代码有一个SQL注入漏洞:直接将用户输入的字符串放入SQL。在SQL中使用?,您可以使用文字并传入bindArgs中的参数:

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

答案 1 :(得分:0)

使用此:

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

}