如何在android sqlite'execSQL'语句中设置整数和字符串值

时间:2012-04-07 09:36:29

标签: android sqlite

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

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

其中emp_age是一个整数,emp_name是一个String。但这不起作用。我怎么能实现这个目标呢?

3 个答案:

答案 0 :(得分:11)

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

@hotveryspicy 回答不仅丑陋而且危险。我会提醒您SQL-injection的可能性,这会花费您存储的数据。 @john smith 回答也是如此。

@ user1318091 回答错误的原因与导致所有这些答案(包括您的给定示例代码)错误的原因相同。如果您阅读文档,您会注意到它:

  

执行 NOT a的单个SQL语句   SELECT / INSERT /的更新 / DELETE

在第一行。它还列出了上述操作的替代方案:

  

对于UPDATE语句,请改用以下任何一种语法。

     
      
  • update(String,ContentValues,String,String [])
  •   
  • 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

答案 1 :(得分:1)

sdk说

  

bindArgs:仅支持byte [],String,Long和Double   bindArgs

但是如果你想使用bindArgs,那么你可以试试这个

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

答案 2 :(得分:-1)

 String sql = "UPDATE emptable  SET age = "+age + " WHERE name = '" + emp_name + "';";
 db.execSQL(sql);