【问题标题】:Android SQLiteException: no such column: -1Android SQLiteException:没有这样的列:-1
【发布时间】:2010-01-01 19:02:49
【问题描述】:

我的一个 android 应用程序执行以下特定 SQLite 查询:

SELECT _id, hourMin, actions FROM profiles
WHERE type=2 AND hourMin > -1 AND days & 8 != 0 AND prof_id >> 16 IN (256)
ORDER BY hourMin ASC LIMIT 1

现在它可以在某些 Android 手机上运行,​​但在其中一些手机上它会崩溃并出现以下错误:

android.database.sqlite.SQLiteException: no such column: -1: , while
compiling: SELECT _id, hourMin, actions FROM profiles WHERE type=2 AND
hourMin > -1 AND days & 8 != 0 AND prof_id >> 16 IN (256) ORDER BY hourMin
ASC LIMIT 1

由于某种原因,“-1”被解释为一列而不是一个数字......这没有多大意义,当我阅读 SQLite 查询语言时,我认为没有必要在括号中转义这个数字。这可能是不同版本的 SQLite 的问题吗?添加括号会有所帮助吗?相反,我可能会使用 >= 0 重写它,但我仍然想了解发生了什么。

【问题讨论】:

  • 尝试用括号括起来,看看是否有帮助。这可能是语句中的分组问题或其他问题。如果我是你,我会计算出每部手机上的 sqlite 版本号,以便你进行比较。
  • 是的,我会这样做,但这是随机拍摄。我喜欢了解我的修复 :-) 不幸的是,我从用户那里收到了一些报告,我自己无法使用手机。实际上,用户甚至很难猜出他们的手机使用的是哪个 SQLite 版本。真的不能要求他们在手机上设置 ADB,在桌面上安装 SDK,通过 USB 连接手机并运行一些神秘的命令行...... :-)
  • 我什至不知道哪些版本的 SQLite 甚至可能在 Android 上运行,所以我不会冒险将其视为评论。但我从更改日志中看到,位运算符并不总是存在。如果解析器无法识别语句中的位运算符,则很容易想象该特定错误。此外,~ 的优先级在 3.5.3 中是固定的。同样,我不知道,但我可以想象带有 ~ 的优先级错误也会与否定一起存在(不太可能但并非完全不可能)。
  • 我也没有这样的列异常,即使该列显然确实存在。事实证明,Froyo 不喜欢没有数据的列,所以我只是在字段中添加了一个“1”作为虚拟对象,并且它起作用了。也许这会对某人有所帮助

标签: android sqlite


【解决方案1】:

测试问题是否由不同版本的 SQLite 和不同版本的 Android 导致,而无法访问实际手机的方法是为不同的 Android 平台创建多个模拟器图像。

使用android GUI 工具可以快速轻松地完成此操作,并且可以让您查看问题是否出现在不同版本的 Android 上,如果出现则查看日志文件。

【讨论】:

    【解决方案2】:

    在执行 SELECT 查询之前,请确保您的表已创建且非空。通常一个列 : -1 错误是由于一个空表引起的。

    如果你想检查表的创建,试试这个代码:

      Cursor c = dbObject.rawQuery(....some query....);
      try{
        c.moveToFirst(); //checking for non-empty table
      }
      catch(Exception e){       // in case table is empty
        ContentValues cv = new ContentValues();
        //add some default table entries
      }
    

    在此之后,如果您引用该表,您将不会得到任何列:-1 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多