Android SQLite错误:变量号必须在?1到?999之间 [英] Android SQLite error: variable number must be between ?1 and ?999

查看:359
本文介绍了Android SQLite错误:变量号必须在?1到?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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆