Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新查询在Android中不起作用_Android_Sqlite - Fatal编程技术网

更新查询在Android中不起作用

更新查询在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(

我试图更新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 = '" + 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);

}

我已经按照您的建议更新了代码,但结果相同。。。检查问题中的更新我已按照您的建议更新了代码,但结果相同。。。检查有问题的更新