Android SQLiteException:没有这样的列:-1

时间:2010-01-01 19:02:49

标签: android sqlite

我的一个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重写它,但我仍然想了解发生了什么。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

确保在执行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错误。