Java 在Android sqlite中更新多行

Java 在Android sqlite中更新多行,java,android,sqlite,Java,Android,Sqlite,我的表格包含id、姓名、职业、年龄、爱好、国家、性别等列。现在我想更新性别为女性、年龄为30岁的字段。所有字段都是文本(字符串)。首先,我计算所有行,然后运行一个循环来更新行。循环正在按照总行数运行,但行未更新。。。为什么?我在哪里犯的错误?这是我的密码: ANDROID SQLITE数据库查询的方法: public void updateUser(String newProfession, String newCountry, String sx, String ag) { SQLit

我的表格包含id、姓名、职业、年龄、爱好、国家、性别等列。现在我想更新性别为女性、年龄为30岁的字段。所有字段都是文本(字符串)。首先,我计算所有行,然后运行一个循环来更新行。循环正在按照总行数运行,但行未更新。。。为什么?我在哪里犯的错误?这是我的密码:

ANDROID 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);
    }
}
public void updateUsersClicked(视图){
int allData=db.countAll();
对于(int i=0;i
您不需要执行for循环 如果你想更新所有30岁的女性,一个QSL“更新”查询就足够了

如果您是SQL新手,可以在此处查看一个简单的示例:

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

使用
execSQL()
而不是
rawQuery()
进行更新

rawQuery()
只是编译SQL,并需要返回的
游标上的一个
moveTo…()
方法来执行它
execSQL()
编译并运行SQL


也可以考虑使用SQL中的绑定ARGs使用<代码> ./COD>参数来避免特殊字符的丢失,并且易受SQL注入的影响。

你知道我很脆弱,但这不是我现在关心的问题。但是,让我们考虑一个年龄限制从15到45的情况。我只需要改变23岁,43岁,24岁,27岁的年龄,这个值可能会随时间而变化。那么会是什么情况呢?这会将查询的WHERE子句更改为如下内容:…WHERE age>15和age您需要学习更新sql查询语法,并编写一些代码,将设计的逻辑转换为正确的更新语法中的查询。。。你的建议对我有用。我当然应该好好处理SQL注入