Android SQLIte查询返回空游标
我正在尝试使用此查询从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
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();
}