Android SQLIte查询返回空游标

Android SQLIte查询返回空游标,android,database,sqlite,cursor,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

我正在尝试使用此查询从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,也尝试了文本,但也不起作用

有什么我没有考虑的吗?非常感谢您的帮助

编辑: 创建数据库的代码:

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

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

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

删除所有空格:

Cursor cursor = getReadableDatabase().rawQuery("SELECT  * FROM  Task WHERE taskId=1", null);
将光标移动到第一个结果:

cursor.moveToFirst();
使用:


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

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循环而被跳过

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

我希望它对您有用。

如果您指的是cusor的-1个元素计数,或者告诉“empty”,那么您只需在之前使用moveToFirst()

Cusror c=rawQuery(…);
//这条线是必需的
c、 moveToFirst();
如果你想调用

c.getCount()

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

显示一些代码怎么样?您能显示表的定义吗?Pff,仍然没有错误。。。您确定没有将_id字段与taskId混合使用吗?我尝试了_id和taskId-结果相同:(仅供参考,如果没有数据,这将失败。您也应该检查
moveToFirst()
的返回值。
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();
}