Как обновить несколько столбцов одной строки в SQLite? - PullRequest
0 голосов
/ 28 июня 2019

У меня есть таблица только с одной строкой на данный момент, и я хочу обновить какой-либо столбец этой строки.метод вставки выполняется правильно, в то время как update возвращает id = 0, а печать имени пользователя всегда является предыдущей и не обновляется.

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table "+TABLE_NAME1+" (ID INTEGER PRIMARY KEY AUTOINCREMENT, USERNAME TEXT, WON INT, DRAW INT, LOST INT, CELLSNUMBER INT,RESULT INT)");        
}
public boolean addUserInformation(String name, int w, int l, int d, boolean firstTime){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();

        values.put(USERNAME, name);
        values.put(WIN, w);
        values.put(LOST, l);
        values.put(DRAW, d);

        long id = 0;
        if(firstTime == true ) {
            id = db.insert(TABLE_NAME1, null, values);
        }
        if(firstTime == false){
            id=db.update(TABLE_NAME1, values, "USERNAME = ? and WON = ? and DRAW = ?  and LOST = ?",new String[] {
                    name,
                    String.valueOf(w),
                    String.valueOf(d),
                    String.valueOf(l)
            });
        }
        if(id == -1)
            return false;
        else
            return true;
    }

1 Ответ

1 голос
/ 28 июня 2019

Полагаю, вы хотите обновить строку с USERNAME = name значениями w, d, l.
3d-аргумент метода update() - это предложение WHERE, в котором вы должны иметь только:

USERNAME = ?

так сделайте это так:

id = db.update(TABLE_NAME1, values, "USERNAME = ?", new String[] {name});

Значения w, d, l не обязательно должны находиться внутри предложения WHERE. Они сохраняются в переменной values и обновят строку в таблице.

...