Ошибка 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()
метод.