簡體   English   中英

Android Studio-SQLite光標不返回任何數據

[英]Android Studio - SQLite Cursor not returning any data

我試圖在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'categories'中,並將返回此ArrayList。

請任何幫助將不勝感激。

假設光標不為空,則應使用while / for循環遍歷結果。

例如: while(x.moveToNext()) { //your logic }

在調試此類問題時,安裝SQLite數據庫瀏覽器然后針對您的數據庫檢查游標查詢以查看是否有任何數據總是很有用的。

這是您的方法的簡單版本:

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' ,這是您要查詢的列。
由於在方法query()中將true作為第一個參數傳遞,這意味着您將獲得不同的值,因此不需要group by參數。
您不需要變量COLUMN,因為變量name
另外,由於游標僅返回1列,因此您不需要getColumnIndex()
編輯
代替:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM