gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:25:51 25 4
gpt4 key购买 nike

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

我正在使用预先存在的鸟类物种数据库构建一个 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;

在上面的代码中,日志消息显示: getCategory 在查询之前接收到预期的字符串“category”,但在查询之后,if/else 循环报告“游标没有返回任何数据” ”。

我期望查询将返回六个字符串,游标循环会将它们添加到 ArrayList“类别”中,然后返回此 ArrayList。

请提供任何帮助,我们将不胜感激。

最佳答案

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

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() 中的第一个参数传递,这意味着您将获得不同的值,因此不需要 group by > 论证。
您不需要变量 COLUMN,因为变量 name 中有您需要的内容。
而且您也不需要 getColumnIndex(),因为光标返回只有 1 列。
编辑
而不是:

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);

关于java - Android Studio - SQLite 光标不返回任何数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56953629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com