Ошибка SQLite в Android: номер переменной должен быть между?1 и?999

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

SQLiteLog: (1) номер переменной должен быть между? 1 и?999 W/System.err: android.database.sqlite.SQLiteException: номер переменной должен быть между? 1 и?999 (код 1): при компиляции: UPDATE LoginTable SET image=?,alternate_contact=?,alternate_email=? ГДЕ customer_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 ответ

Решение

Эта строка:

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

это неверно.
У вас есть 2 варианта.
1-й - объединить значение, переданное 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 это строка

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

Другие вопросы по тегам