我的表包含列id,名称,职业,年龄,爱好,国家,性别。现在我想更新性别为女性且年龄为30的字段。所有字段都是文本(字符串)。首先,我计算所有行,然后运行循环来更新行。循环按总行运行但行未更新...为什么?我在哪里做错了?这是我的代码:
用于安装SQLITE数据库查询的方法:
public void updateUser(String newProfession, String newCountry, String sx, String ag) {
SQLiteDatabase db = this.getWritableDatabase();
String query = "UPDATE "+TABLE_USER+" SET "+KEY_PROFESSION+"='"+newProfession+"', "+KEY_COUNTRY+"='"+newCountry+"' WHERE "+KEY_SEX+"='"+sx+"' AND "+KEY_AGE+"='"+ag+"'";
Cursor cursor = db.rawQuery(query, null);
cursor.close();
db.close();
}
public int countAll() {
String countQuery = "SELECT * FROM " + TABLE_USER;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int cnt = cursor.getCount();
cursor.close();
db.close();
return cnt;
}
调用方法
public void updateUsersClicked(View view) {
int allData = db.countAll();
for (int i = 0; i < allData; i++) {
db.updateUser("SENIOR ENGINEER", "CANADA", "female", "30");
System.out.println("T H I S I S T H E R E S U L T: " + i);
}
}
答案 0 :(得分:2)
使用execSQL()
而非rawQuery()
进行更新。
rawQuery()
只是编译SQL并且需要返回moveTo...()
上的Cursor
方法之一来执行它。 execSQL()
编译并运行SQL。
还要考虑在SQL中使用带有bind args的?
参数,以避免转义特殊字符并容易受到SQL注入攻击。
答案 1 :(得分:1)
您不需要执行for循环 一个QSL&#34;更新&#34;如果你想要更新所有30岁的女性,那么查询就足够了。
如果您是SQL新手,可以在此处查看一个简单示例: Simple SQL Update example
如果您想做其他事情 - 请编辑您的问题