【问题标题】:SQLIte query returns empty cursorSQLite 查询返回空游标
【发布时间】:2014-02-23 18:22:34
【问题描述】:

我正在尝试使用此查询从我在 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 + "))"

【问题讨论】:

  • 显示一些代码怎么样?
  • 你能显示你的表的定义吗?
  • 噗,还是没有错……你确定你没有把_id字段和taskId混在一起吗??
  • 我用 _id 和 taskId 都试过了 - 结果相同:(

标签: android database sqlite cursor


【解决方案1】:
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();
}

希望对你有用..

【讨论】:

    【解决方案2】:

    如果您创建了例如有 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"));
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 仅供参考,如果没有数据,这将失败。你也应该检查moveToFirst()的返回值。
      【解决方案4】:

      如果您通过告诉“空”来表示 -1 的 cusor 元素计数,那么您只需要在之前使用 moveToFirst()。

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

      如果你想调用

      c.getCount()
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-28
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        相关资源
        最近更新 更多