【问题标题】:Android SQLite error: variable number must be between ?1 and ?999Android SQLite 错误:变量号必须在 ?1 和 ?999 之间
【发布时间】:2020-05-02 23:16:08
【问题描述】:

当我尝试使用更大的数字更新我的表时,我收到以下错误。

SQLiteLog: (1) 变量号必须在?1 和?999 之间 W/System.err:android.database.sqlite.SQLiteException:变量号 必须介于 ?1 和 ?999 (code 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 的数字

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

【问题讨论】:

  • 请使用代码块正确格式化您的代码。此外,该错误会告诉您究竟出了什么问题。您有一些限制,这意味着最大数字(我假设它意味着 ID)必须大于 1 并且小于(或等于)999。请从您的项目中发布更多示例代码,例如数据库/表是如何创建的
  • ?74123 是问题所在,其原因在于生成此 SQL 的代码。请发布该代码。
  • 有关?NNN 含义的详细信息,请参阅sqlite.org/lang_expr.html#varparam,顺便说一句 - 明确编号的参数。

标签: java android sqlite android-sqlite


【解决方案1】:

这一行:

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) });

如果userModel.consumer_no 是字符串,则可以省略String.valueOf()

您的代码中的错误是您以某种方式混合了上述两种将参数userModel.consumer_no 传递给update() 方法的方法。

【讨论】:

  • 嘿...谢谢您的帮助...代码现在工作正常
  • 如果它有效,您可以考虑接受答案
  • Accept 表示勾选我的答案左侧的复选标记。
  • 没关系
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多