我正在尝试在 execSQL 语句中设置一个整数和一个字符串值:
mydb.execSQL("UPDATE emptable set age=? where name=?",new int[] {emp_age},new String[] {emp_name});
其中 emp_age 是一个整数,emp_name 是一个字符串。但这不起作用。我怎样才能做到这一点?
抱歉,我对给出的答案不满意,我会解释原因。
@hotveryspicy的答案不仅丑陋而且危险。我会提醒您SQL 注入的可能性,这可能会花费您存储的数据。@john smith的回答也是如此。
@user1318091答案不正确的原因与使所有这些答案(包括您给定的示例代码)错误的原因相同。如果您阅读文档,您会注意到它说:
执行不是SELECT/INSERT/ UPDATE /DELETE 的单个 SQL 语句。
在第一行。它还列出了上述操作的替代方案:
对于 UPDATE 语句,请改用以下任何一种。
- 更新(字符串,内容值,字符串,字符串 [])
- updateWithOnConflict(String, ContentValues, String, String[], int)
如果您选择使用简单的update()
-method,您的查询将如下所示(未经测试!):
ContentValues values = new ContentValues();
values.put("age", age); // your integer...
mydb.update("emptable", values, "name=?", new String[]{emp_name});
还要检查这个问题以获取正确的“where”-syntax: update sql database with ContentValues and the update-method
SDK说
bindArgs:在 bindArgs 中仅支持 byte[]、String、Long 和 Double
但是如果你想使用 bindArgs,那么你可以试试这个
mydb.execSQL("UPDATE emptable set age=? where name=?",new String[] {String.valueOf(emp_age)},new String[] {emp_name});
String sql = "UPDATE emptable SET age = "+age + " WHERE name = '" + emp_name + "';";
db.execSQL(sql);