如何在SQLite中修改项目的值?

时间:2012-03-16 15:46:38

标签: android sqlite

假设我有这个sqlite数据库结构:

 ID     PRODUCT_NAME     AVAILABILITY 

  1       foo            0
  2       bar            1
  3       baz            0
  4       faz            1

我如何修改AVAILABILITY fom 1的值 - > 0 PRODUCT_NAME = 'bar'? 像这样的东西, 伪代码:

db.execSQL( "UPDATE TABLE" + Table_name + "MODIFY" + availability + "=" + 0 + "WHERE" +  product_name + "like ? " + 'bar');

我假设我还必须使用onCreate()和onUpgrade()方法删除并重新创建表,对吧? 一些代码将受到高度赞赏。

4 个答案:

答案 0 :(得分:5)

使用此:

SQLiteDatabase db=dbHelper.getWritableDatabase();
String sql="update "+Table_name+" set availability='0' where product_name like 'bar'";
Object[] bindArgs={"bar"};
try{
            db.execSQL(sql, bindArgs);
return true;
}catch(SQLException ex){
Log.d(tag,"update data failure");
return false;
}

答案 1 :(得分:2)

您还可以使用Android为您提供的update()insert()query()delete()方法

// define the new value you want
ContentValues newValues = new ContentValues();
newValues.put("AVAILABILITY", 0);
// you can .put() even more here if you want to update more than 1 row

// define the WHERE clause w/o the WHERE and replace variables by ?
// Note: there are no ' ' around ? - they are added automatically
String whereClause = "PRODUCT_NAME == ?";

// now define what those ? should be
String[] whereArgs = new String[] {
        // in order the ? appear
        "bar"
};

int amountOfUpdatedColumns = db.update("YourTableName", newValues, whereClause, whereArgs);

这里的优点是您可以免费获得正确的SQL语法。当你使用"hax ' DROP TABLE '"作为?的参数时,它也会转义你的变量,以防止发生不良事件。

唯一仍然不安全的是将column LIKE ?"hello%world_"之类的参数一起使用,因为%(匹配几个字符的任何内容)和_(匹配任何1个字符) )没有逃脱。 您需要手动转义(例如,在!_之前放置%)并使用

String whereClause = "LIKE ? ESCAPE '!'"
String[] whereArgs = new String[] {
    likeEscape("bar") 
    // likeEscape could be replaceAll("!", "!!").replaceAll("%", "!%").replaceAll("_", "!_") maybe
}

顺便说一句:如果您使用

,您的单个代码行应该可以使用
db.execSQL( "UPDATE " + Table_name + " SET " + availability + "=0 WHERE " +  product_name + " like 'bar'");

答案 2 :(得分:1)

您希望update不是alteralter用于数据库架构,update用于存储在其中的数据。

例如: update TABLE_NAME set AVAILABILITY = 0 where PRODUCT_NAME like 'bar';

另外,不要只是将字符串粘在一起构建一个SQL查询。使用预准备语句或其他语句构建库来避免SQL注入攻击和错误。

答案 3 :(得分:1)

Sqlite使用“SQL”。你需要一个SQL“更新”

db.execSQL( "update mytable set availability=0 where product_name like '%" + bar + "%'");

这是SQL“select”,“update”,“insert”和“delete”("CRUD")命令的良好链接:

http://www.w3schools.com/sql/default.asp