1 回答

TA貢獻1785條經驗 獲得超4個贊
您收到錯誤是因為您正在使用以下重載execSQL():
public void execSQL (String sql, Object[] bindArgs)
你null作為第二個參數傳遞。
如果你使用這個:
public void execSQL (String sql)
只需傳遞 sql 字符串,代碼就可以工作:
database.execSQL(
"Update meal_table SET On_Menu = On_Menu + 1 where date = '"+date+"' and Meal = '"+meal+"'"
);
但這是執行 sql 語句的錯誤方法,因為通過連接參數,您很容易受到sql 注入的影響。
您可以做的是使用查詢來獲取列的當前值On_Menu,然后ContentValues使用該update()方法。
現在還有另一種方法,即直接使用rawQuery(),盡管沒有記錄:
String sql = "Update meal_table SET On_Menu = On_Menu + 1 where date = ? and Meal = ?";
Cursor cursor = database.rawQuery(sql, new String[] {date, Meal});
cursor.moveToFirst();
cursor.close();
database.close();
該代碼可以正常工作,并且可以正確傳遞參數,因此可以避免 sql 注入。
添加回答
舉報