假设我有这个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()方法删除并重新创建表,对吧? 一些代码将受到高度赞赏。
答案 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
不是alter
。 alter
用于数据库架构,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")命令的良好链接: