2016-12-08 7 views
0

Я новичок, я пытаюсь обновить запись некоторыми полями и ничего особенного. Я заметил! что на это можно ответить много раз, но ни один из предложенных ответов не работает, и я не знаю, где проверить мой код, чтобы найти решение. У меня есть следующий:Почему ни одно предлагаемое решение не работает, когда я пытаюсь обновить запись в SQLite Database?

public int updateUser(User user) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 

    values.put(U_ID, user.getId()); 
    values.put(U_NAME, user.getName()); 
    values.put(U_EMAIL, user.getEmail()); 
    values.put(U_ZIP, user.getZip()); 
    values.put(U_CREATED_AT, user.getCreated_at()); 

    int res = db.update("login_user", values, "U_ID" + "=?", new String[] {String.valueOf(user.getId())}); 

    return res; 
} 

Я попытался

int res = db.update("login_user", values, "U_ID" + " = ?", new String[] {String.valueOf(user.getId())}); 

int res = db.update("login_user", values, "U_ID" + "=?", new String[] {(UserId)}); 

int res = db.update(MYTABLE, values, U_ID + "=?", new String[] {String.valueOf(user.getId())}); 

Я увеличил свою версию базы данных, чтобы сделать его пустым я сохранил новый рекорд так

Моих данных не нулевые, но я получаю как res = 0, а не ожидаемое res = 1 и без ошибок

Что я делаю неправильно и где искать?

+0

Когда ID это номер, почему вы сравнивая его против строки? –

+0

Значит, вы должны сделать int res = db.update (MYTABLE, значения, U_ID + "=?", Новый Int [] {user.getId()}); – NoviceUser

+0

Это не сработает, потому что 'update' принимает только строки в качестве параметров. Поэтому вы не должны использовать параметр для этого. –

ответ

0

здесь находится ваша проблема

Я увеличил свою версию базы данных, чтобы сделать его пустым

при условии, ваша база данных пуста, то вы должны использовать метод вставки вместо. обновление пустой таблицы не будет иметь никаких эффектов, потому что условие WHERE в операторе обновления всегда возвращает false.

db.insertWithOnConflict (String table, 
      null, //nullColumnHack 
      values, 
      SQLiteDatabase.CONFLICT_REPLACE); 

это создаст запись, если идентификатор пользователя не найден, или заменить существующий USERID строку, если есть конфликт

+0

Я проверил, есть запись – NoviceUser

+1

@NoviceUser, вы также можете проверить, имеет ли ваша запись тот же самый UserId, что и в значениях? –

+0

Я думаю, что вы можете быть прав, позвольте мне проверить это – NoviceUser

0

Ответ от метода обновления Sqlite - это количество обновленных строк.

Если запись существует в БД, то он будет возвращать 1 (или более)

Если вы обновили номер DB все записи delted - так проверить наличие записи 1-го.

Если он возвращает 0, то я подозреваю, что у вас нет записи в БД в первую очередь - так обновляется 0 записей.

Если вы ожидаете 1 - тогда сначала проверьте, существует ли запись, через ADB - см. Это answer о том, как проверить содержимое вашей БД.

+0

Я проверил есть запись – NoviceUser

+0

И соответствует ли запись условию? то есть UserId, который вы передаете в качестве параметра? – Zain

Смежные вопросы