Понимание команды обновления на sqlite

#java #android #sqlite

#java #Android #sqlite

Вопрос:

У меня возникли некоторые трудности с пониманием команды обновления для SQLite.

В моем примере я выполняю обновление базы данных, но при возникновении ошибки я отправляю сообщение об ошибке. Если пользователь пытается обновить запись, которая не существует, я не получаю сообщение об ошибке.

Вот мой код, сначала команда обновления, а затем мой вызов:

 public long updateContact(String firstName, String lastName, String address, String city, String state, 
         int zipCode, long mobileNumber, long altNumber, String email) {
    ContentValues contactInfo = new ContentValues();
    contactInfo.put(KEY_FNAME, firstName);
    contactInfo.put(KEY_LNAME, lastName);
    contactInfo.put(KEY_ADDR, address);
    contactInfo.put(KEY_CITY, city);
    contactInfo.put(KEY_STATE, state);
    contactInfo.put(KEY_ZIP, zipCode);
    contactInfo.put(KEY_MOBILE, mobileNumber);
    contactInfo.put(KEY_ALT, altNumber);
    contactInfo.put(KEY_EMAIL, email);

    String where = "FIRSTNAME = '"   firstName   "' AND LASTNAME = '"   lastName   "'";

    return db.update(DATABASE_TABLE, contactInfo, where, null);
}
  

Вызов:

 if (searchTerm.length() > 0) {
                        id = db.updateContact(fName, lName, address.getText().toString().trim(), 
                                    city.getText().toString().trim(), state.getSelectedItem().toString().trim(), Integer.parseInt(zip.getText().toString().trim()), 
                                    Long.valueOf(mobile.getText().toString().trim()), Long.valueOf(alternate.getText().toString().trim()), 
                                    email.getText().toString().trim());
                        if (id == -1) {
                            DisplayErrorDialog("I'm sorry, we can not update the contact with the present data.");
                        }
                    }
  

Обновление работает, когда я предоставляю ему действительные данные. Но когда я даю ему недопустимые данные (имя, которого нет в базе данных), я не получаю соответствующее сообщение об ошибке.

Ответ №1:

Из руководства fine:

ВОЗВРАТ
количество затронутых строк

So db.update вернет 0, когда ничего не было обновлено (т. Е. Ваши where строки не совпадали ни с какими строками), и этот ноль будет возвращен updateContact . Итак, вы, вероятно, хотите переименовать id в numberUpdated (или аналогичный) и показывать при ошибке numberUpdated <= 0 вместо поиска -1 .

Ответ №2:

Возвращаемое значение — это количество обновленных строк, а не идентификатор. Проверьте 0, а не -1. Это означает, что вы можете обновлять более одной записи, и именно так обычно работают обновления базы данных.