【问题标题】:Android SQLite rawquery returns only first recordAndroid SQLite rawquery 只返回第一条记录
【发布时间】:2013-08-05 17:53:59
【问题描述】:

我的 SQLite 查询只返回一条记录,但是该表有多行

cursor=mydb.rawQuery("Select category from items;", null);

我什至尝试过GROUP BY,但还是不行。

我是 SQLite 新手,如果有任何帮助,我将不胜感激。谢谢。

【问题讨论】:

  • 请说明几行表格内容和代码after rawQuery 用于检查光标指向的内容。

标签: android sqlite


【解决方案1】:

首先你的字符串查询不能被终止,所以不要将它传递为:

"Select category from items;"

您应该尝试将其传递为:

"Select category from items"

this page 所述。

另外,你是在光标上循环吗?以下是如何使用 while 循环从游标中获取数据的示例:

ArrayList<String> results = new ArrayList<String>()
while (cursor.moveNext()) {
    results.add(cursor.getString(0)); // 0 is the first column 
}

【讨论】:

  • 感谢您的帮助jackerran,我已删除“;”但仍然得到相同的结果。当我尝试将查询运行为:“从项目 GROUP BY 类别中选择类别”时,仅返回第一条记录。 cursor.getcount() 只返回一行。如果我在桌面上的 sqlite 中运行相同的查询,它可以正常工作。
  • 我会删除该组,因为您不需要它。您是否在数据库中验证了记录是否存在?并且您正在连接到正确的数据库?您的桌面和笔记本电脑环境之间的 java/sqlite/android sdk/ 版本和操作系统是否也有任何差异?
【解决方案2】:

首先,搜索:

Cursor cs = myDataBase.rawQuery("Your query", null);
if (cs.moveToFirst()) {
    String a = cs.getString(cs.getColumnIndex("your_column_name"));
    cs.close();
    return a;
}
cs.close();
return "";

从光标处获取信息:

if (cs.moveToFirst()) {
    ArrayList<String> results = new ArrayList<String>()
    do {
            results.add(cs.getString(cs.getColumnIndex("your_column_name"))); 
    } while (cs.moveNext());
}

如果没有,我的项目出错了。但这对我有用。顺便说一句,您的查询看起来不太好。如果您提供有关您的数据库的一些信息,我们可以提供更多帮助。

【讨论】:

    【解决方案3】:

    使用它来选择表格中的所有项目:

    Cursor cursor = db.rawQuery("SELECT * FROM Tablename , 空);

    【讨论】:

      【解决方案4】:

      这对你有帮助

      public ArrayList<mydata> getallContents() {
      
          ArrayList<mydata> lst = new ArrayList<mydata>();
      
          SQLiteDatabase db = this.getReadableDatabase();
      
          Cursor c = db.rawQuery("select * from " + GAMETABLE, null);
      
          if (c.moveToFirst()) {
              do {
                  lst.add(new mydata(c.getString(1),
                          c.getString(3),c.getString(4),c.getString(5),c.getString(6)));
      
              } while (c.moveToNext());
          }
          db.close();
          return lst;
      }
      

      【讨论】:

        【解决方案5】:

        您不需要原始查询方法。我认为在这种情况下android方式更好:

            db.query(items, category, null, null, null, null, null);
        

        而不是使用光标如何已经写在其他评论中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-13
          • 2021-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          相关资源
          最近更新 更多