我正在尝试使用此查询从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 + "))"
答案 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/,使用this或this打开它并检查是否有任何错误。
删除所有空格:
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)。