Ошибка SQLite в Android: номер переменной должен быть между? 1 и? 999 - PullRequest
0 голосов
/ 05 апреля 2019

Я получаю следующую ошибку, когда пытаюсь обновить таблицу, используя большее число.

SQLiteLog: (1) номер переменной должен быть между? 1 и? 999 W / System.err: android.database.sqlite.SQLiteException: номер переменной должно быть между? 1 и? 999 (код 1): при компиляции: ОБНОВЛЕНИЕ LoginTable SET image = ?, alternate_contact = ?, alternate_email =? ГДЕ consumer_id =? 74123

Код: -

public static void updateProfileInfo(Context context, Consumer userModel, String consumerno) {
        SQLiteDatabase db = DatabaseProvider.dbHelper.getReadableDatabase();
        ContentValues values = new ContentValues();
        values.put(LoginTable.Cols.ALTERNATE_EMAIL_ID, userModel.alternate_email != null ? userModel.alternate_email : "");
        values.put(LoginTable.Cols.PROFILE_IMAGE, userModel.profileImage != null ? userModel.profileImage : "");
        values.put(LoginTable.Cols.ALTERNATE_CONTACT_NO, userModel.alternateContact != null ? userModel.alternateContact : "");
        db.update(LoginTable.TABLE_NAME, values, LoginTable.Cols.CONSUMER_ID + "=?" + userModel.consumer_no, null);
        if (db.isOpen()) {
            db.close();
        }
}

, где номер потребителя объявлен как VARCHAR

Номер потребителя может быть длиной от 1 до 999999999999

я должен изменить тип на что-то еще?

1 Ответ

0 голосов
/ 05 апреля 2019

Эта строка:

db.update(LoginTable.TABLE_NAME, values, LoginTable.Cols.CONSUMER_ID + "=?" + userModel.consumer_no, null);

неверно.
У вас есть 2 варианта.
Первый - объединить значение, переданное LoginTable.Cols.CONSUMER_ID, следующим образом:

db.update(LoginTable.TABLE_NAME, values, LoginTable.Cols.CONSUMER_ID + " = '" + userModel.consumer_no + "'", null);

, если userModel.consumer_no - строка или:

db.update(LoginTable.TABLE_NAME, values, LoginTable.Cols.CONSUMER_ID + " = " + userModel.consumer_no, null);

, если userModel.consumer_no - целочисленное значение.
Второй вариант лучше и безопаснее:

db.update(LoginTable.TABLE_NAME, values, LoginTable.Cols.CONSUMER_ID + " = ?", new String[] { String.valueOf(userModel.consumer_no) });

Вы можете опустить String.valueOf(), если userModel.consumer_no - строка.

Ошибка в вашем коде состоит в том, что вы как-то смешали два вышеупомянутых способа передачи аргумента userModel.consumer_no методу update().

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