Android SQLite错误:变量号必须介于?1和?999之间

时间:2019-04-05 08:25:00

标签: java android sqlite

尝试使用更大的数字更新表时出现以下错误。

  

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的数字

我应该将类型更改为其他类型吗?

1 个答案:

答案 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()方法的上述两种方法。