2

我正在尝试在 execSQL 语句中设置一个整数和一个字符串值:

mydb.execSQL("UPDATE emptable set age=? where name=?",new int[] {emp_age},new String[] {emp_name});

其中 emp_age 是一个整数,emp_name 是一个字符串。但这不起作用。我怎样才能做到这一点?

4

3 回答 3

11

抱歉,我对给出的答案不满意,我会解释原因。

@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

于 2012-04-07T10:44:20.700 回答
1

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});
于 2012-04-07T10:06:57.483 回答
-1
 String sql = "UPDATE emptable  SET age = "+age + " WHERE name = '" + emp_name + "';";
 db.execSQL(sql);
于 2012-04-07T09:45:26.817 回答