当前位置: 首页 > 知识库问答 >
问题:

Android Studio-SQLite光标不返回任何数据

吴飞语
2023-03-14

我试图返回SQLite数据库的“category”列中不同值的名称。光标似乎没有返回任何结果。

我正在用一个预先存在的鸟类数据库构建一个Android应用程序。其目的是允许用户通过应用程序探索数据库。我遇到的问题是试图返回数据库中存在的不同种类的鸟类物种。数据库似乎正在成功打开-没有引发SQLite异常-但是在使用查询后,'.MoveTonext'方法似乎没有返回任何数据。

public ArrayList<String> getCategory(String[] name){
        String TABLE_BIRDS = "main";
        String[] COLUMN = name;
        ArrayList<String>categories = new ArrayList<>();

        if (name[0]!=null)
        {
            Log.d(LOG_TAG, name[0]);
        } else {
            Log.d(LOG_TAG, "name[0] has not been passed");
        }
        x = db.query(true, TABLE_BIRDS, new String[] { COLUMN[0] } , null, null, COLUMN[0], null, null, null );
        if (x.moveToNext()) {
            Log.i(LOG_TAG, x.getString(x.getColumnIndex("category")));
        }
        else {
            Log.i(LOG_TAG, "The cursor is not returning any data");
        }
        //Simple cursor loop
        if (x.moveToNext()){
            String category = new String();
            category = x.getString(x.getColumnIndex(category));
            categories.add(category);
            Log.i("cursor loop", category);
        }
        return categories;

请帮忙,不胜感激。

共有1个答案

邵和硕
2023-03-14

下面是您的方法的一个更简单的版本:

public ArrayList<String> getCategory(String[] name) {
    String TABLE_BIRDS = "main";
    ArrayList<String> categories = new ArrayList<>();

    if (name[0] != null) {
        Log.d(LOG_TAG, name[0]);
    } else {
        Log.d(LOG_TAG, "name[0] has not been passed");
    }

    Cursor x = db.query(true, TABLE_BIRDS, new String[]{name[0]}, null, null, null, null, null, null);

    while (x.moveToNext()) {
        String category = x.getString(0);
        categories.add(category);
        Log.i("cursor loop", category);
    }

    if (x.getCount() == 0) {
        Log.i(LOG_TAG, "The cursor is not returning any data");
    }
    x.close();

    return categories;
}

我猜name[0]包含字符串'category',这是您要查询的列。
因为您将true作为方法query()中的第一个参数传递true,这意味着您将获得不同的值,所以不需要group by参数。
您不需要变量列,因为您在变量name中有您需要的内容。
也不需要

Cursor x = db.query(true, TABLE_BIRDS, new String[]{name[0]}, null, null, null, null, null, null);

试试rawQuery():

Cursor x = db.rawQuery("SELECT DISTINCT " + name[0] + " FROM " + TABLE_BIRDS, null);
 类似资料:
  • 我在HBASE有一张桌子。我和菲尼克斯一起创造的 然后我用spark填充它(我使用hortonworks shc-core连接器): 多谢帮忙。

  • 我有一个使用MVVM构建的应用程序。我已成功地将应用程序插入SQLite数据库。我现在尝试在插入完成后获取数据库中的rowId,以便在后续活动中可以对该行进行更新。 我完全理解在DAO中将Void更改为Long的部分,但我不知道如何在活动级别实际访问该Long,并将其保存到一个变量中,该变量可以从一个活动发送到另一个活动。加价。下面是代码示例。 表/实体类: 存储库类: 道 ViewModel类:

  • 我有一个像这样的mysql表 但是我无法用这个函数检索“成人”和“儿童”的值 错误日志显示变量被正确地传递给函数: 为什么此函数返回?

  • TestCase 2: baseChars:['a','b'] 所需字符串长度:1 产出: 有人能帮忙吗?我已经把我的代码放在GitHub里了。如果您可以将我的实现更改为非递归,但保留函数返回类型,也将受到重视。

  • 问题内容: 我正在开发一个短信应用程序,我试图从每次对话中获取最新的短信。 这是我的SQL语句: 我在SQLite Expert中运行了查询,并且得到了正确的响应: 但是,当我在应用程序中运行它时,我得到: 这是我的桌子 这是我的Datamanipulator类: 问题答案: 使用时,结果的每一行对应于原始表的多行。这些结果的计算有三种可能性: 具有聚合函数的列类似于或计算组中所有行的值; 子句中

  • 我有一个名为的模板助手,我想将3个集合游标返回到我的模板,以便我可以查看所有 最好的方法是什么?谢谢