Android: есть ли лучший способ вставить и / или обновить запись в базе данных? - PullRequest
11 голосов
/ 16 декабря 2009

У меня есть база данных, содержащая идентификатор пользователя и заметку. Пользователь не знает, есть ли уже заметка в БД, поэтому он пишет ее и нажимает кнопку «Отправить». Я хочу вставить эту заметку, если для userId нет заметки, или обновить уже существующую заметку userId:

notesDb.open();
boolean updateResult = notesDb.updateMessage(
        userId,
        details_notes_input.getText().toString());

if(updateResult == true) {
    Log.d("databaseTester", "Updated entry into table");
} else {
    Log.d("databaseTester", "FAILED to update entry into table");
    long insertResult = notesDb.insertMessage(
            userId,
            details_notes_input.getText().toString());
    if(insertResult == -1){
        Log.d("databaseTester", "Failed to insert entry into table");
    } else {
        Log.d("databaseTester", "Inserted entry into table");
    }   
}
notesDb.close();

Итак, я в значительной степени пытаюсь «обновить» запись, и если мне не удается, я пытаюсь «вставить» ее. Я не очень хорошо знаю SQL, но я думаю, что был бы лучший способ. Спасибо.

Ответы [ 3 ]

13 голосов
/ 16 декабря 2009

Похоже, вы могли бы использовать sqlite REPLACE для решения этой проблемы, используя SQLiteDatabase.replace().

1 голос
/ 17 января 2013

Вы можете поймать исключение ограничения, запущенное в случае существования предыдущего идентификатора, а затем обновить.

try {
    db.insertOrThrow("sometable", null, cv);
} catch (SQLiteConstraintException e) {
    db.update("sometable", cv,"sometable_uid =" + id, null);
}
0 голосов
/ 05 июля 2013

Попробуйте это

result = db.insertWithOnConflict ("имя таблицы", null, cv, -1);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...