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 注入。
添加回答
举报