Android SQLite错误:变量号必须在?1到?999之间 [英] Android SQLite error: variable number must be between ?1 and ?999
问题描述
尝试使用更大的数字更新表时出现以下错误.
I'm getting the following error when I am trying to update my table using a bigger number.
SQLiteLog:(1)变量号必须在?1和?999之间 W/System.err:android.database.sqlite.SQLiteException:变量号 必须在?1和?999(代码1)之间:,同时进行编译:UPDATE LoginTable SET image = ?, alternate_contact = ?, alternate_email =?在哪里 Consumer_id =?74123
SQLiteLog: (1) variable number must be between ?1 and ?999 W/System.err: android.database.sqlite.SQLiteException: variable number must be between ?1 and ?999 (code 1): , while compiling: UPDATE LoginTable SET image=?,alternate_contact=?,alternate_email=? WHERE 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
where the consumer number is declared as VARCHAR
消费者编号可能是长度为1到999999999999的数字
consumer number might be a number of length 1 to 999999999999
我应该将类型更改为其他类型吗?
should I change the type to something else??
推荐答案
此行:
db.update(LoginTable.TABLE_NAME, values, LoginTable.Cols.CONSUMER_ID + "=?" + userModel.consumer_no, null);
不正确.
您有2个选择.
第一种是将传递给LoginTable.Cols.CONSUMER_ID
的值连接起来,像这样:
is incorrect.
You have 2 choices.
The 1st is to concatenate the value passed to LoginTable.Cols.CONSUMER_ID
like this:
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
是整数值.
第二种选择更好,更安全:
if userModel.consumer_no
is an integer value.
The 2nd choice is better and safer:
db.update(LoginTable.TABLE_NAME, values, LoginTable.Cols.CONSUMER_ID + " = ?", new String[] { String.valueOf(userModel.consumer_no) });
如果userModel.consumer_no
是字符串,则可以省略String.valueOf()
.
代码中的错误是您以某种方式混合了将参数userModel.consumer_no
传递给update()
方法的上述两种方法.
You can omit String.valueOf()
if userModel.consumer_no
is a string.
The error in your code is that you mixed somehow the above 2 ways of passing the argument userModel.consumer_no
to the update()
method.
这篇关于Android SQLite错误:变量号必须在?1到?999之间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!