尝试使用更大的数字更新表时出现以下错误。
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
代码为:-
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的数字
我应该将类型更改为其他类型吗?
答案 0 :(得分:0)
此行:
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()
方法的上述两种方法。