在Android sqlite中更新多行

时间:2014-06-24 21:19:07

标签: java android sqlite

我的表包含列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);
    }
}

2 个答案:

答案 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

如果您想做其他事情 - 请编辑您的问题