SQLIte查询返回空游标

时间:2014-02-23 18:22:34

标签: android database sqlite cursor

我正在尝试使用此查询从Android中的SQLite数据库中获取数据。

Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = 1 ", null);

但是光标返回为空,存在值为1的taskId。

如果我这样做

Cursor cursor = db.rawQuery("SELECT * FROM Task", null);

我的光标包含所有值 - 包括值为1的taskId。

我也尝试了以下所有命令,但它们都没有工作:

Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = " + 1, null);
Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = " + "'1'", null);
Cursor cursor = db.rawQuery("SELECT * FROM Task where taskId = ?", new String[]{"1"});

taskId是Integer类型,也是用Text编写的,也没用。

我有没有考虑过的事情?非常感谢帮助!

修改: 创建数据库的代码:

CREATE TABLE Task + " (" +
        _id INTEGER PRIMARY KEY," +
        "taskDescription TEXT, +                
        "taskId INTEGER," +
        "taskName TEXT" + 
        "PreviousTaskID " + "REFERENCES " + "PreviousTasks " + 
        "(" + PreviousTasks._ID + "))"

4 个答案:

答案 0 :(得分:6)

Cursor cursor = null;
String Query ="SELECT * FROM Task where taskId = 1 ";
cursor = sqldb.rawQuery(Query, null);

if (cursor != null && cursor.moveToFirst()) {
  do {
    // ...
  } while (cursor.moveToNext());

  cursor.close();
}

我希望它对你有用..

答案 1 :(得分:1)

如果您创建了数据库,例如包含4个字段并使用了此数据库,那么如果添加新字段,则需要在手机上重新创建数据库,删除并创建数据库。

您的数据库必须位于/data/data/com.yourapp.package/databases/,使用thisthis打开它并检查是否有任何错误。

删除所有空格:

Cursor cursor = getReadableDatabase().rawQuery("SELECT  * FROM  Task WHERE taskId=1", null);

将光标移至第一个结果:

cursor.moveToFirst();

使用getInt

int taskid = c.getnt(c.getColumnIndex("taskId"));

答案 2 :(得分:1)

我刚刚发现问题所在:访问游标时,我使用了以下代码:

cursor.moveToFirst();
while(cursor.moveToNext()){
  //stuff
};

相反,我必须做的是:

cursor.moveToFirst();
do{
  //stuff
} while(cursor.moveToNext());

我查询时没有注意到错误

Cursor.rawQuery("SELECT * FROM TASK");

因为我的光标有多个条目而且。但是当我查询时

Cursor.rawQuery("SELECT * FROM TASK WHERE taskID=1");

光标只有一个由于while循环而被跳过的条目。

答案 3 :(得分:0)

如果你的意思是通过告诉“空”来计算cusor元素的数量,那么你只需要在之前使用moveToFirst()。

Cusror c = rawQuery(...); 
// this line is required 
c.moveToFirst();

然后如果您尝试调用

c.getCount()

它返回!= 0(如果查询返回的值大于0)。