簡體   English   中英

Android SQL查詢無法識別第一個條目

[英]Android SQL query not recognizing first entry

扣好鄉親,這是一個奇怪的事情。 我目前正在開發一個涉及在sqlite數據庫中存儲和檢索數據的android應用。 我正在瀏覽該應用程序,並測試了一些基本功能以確保一切正常,然后發現我從數據庫中檢索數據時發現了一個錯誤。 當用戶將他們的第一個條目輸入應用程序時,一切都會按預期進行,值會被處理和存儲。 但是,當我返回並嘗試使用SELECT * FROM history;訪問該數據時SELECT * FROM history; 當我調用data.moveToNext() ,我得到一個返回true的游標,但是當我使用while(data.moveToNext()) { //get values and add to a List<> }遍歷它while(data.moveToNext()) { //get values and add to a List<> } while循環永遠不會執行。

將文件移至計算機並使用數據庫瀏覽器打開數據庫后,我查看了數據庫的內容,我可以看到我的輸入。

這是我從數據庫中獲取所有點的方法:

List<PointValue> getAllPoints() {
    List<PointValue> points;
    Cursor data = rawQuery("SELECT * FROM history");
    if (data.moveToNext()) {
        points = new ArrayList<>();
        while (data.moveToNext()) {
            System.out.println("Looped");
            long timestamp = data.getLong(data.getColumnIndexOrThrow("timestamp"));
            int level = data.getInt(data.getColumnIndexOrThrow("level"));
            points.add(new PointValue(timestamp, level));
        }
    } else {
        return null;
    }
    data.close();
    if (points.size() == 0) {
        return null;
    }
    return points;
}

rawQuery方法如下所示:

private Cursor rawQuery(String sql) {
    SQLiteDatabase db = this.getReadableDatabase();
    return db.rawQuery(sql, null);
}

當我嘗試自行調試時,即使我知道數據庫中至少有一個點, points的大小也為0。 思考? 包含我所有與SQL相關的東西的類擴展了SQLiteOpenHelper

編輯:這是@Isaac Payne建議的解決方案(仍然不起作用):

public List<PointValue> getAllPoints() {
    List<PointValue> points = new ArrayList<>();
    Cursor data = rawQuery("SELECT * FROM history");

    while (data.moveToNext()) {
        long timestamp = data.getLong(data.getColumnIndexOrThrow("timestamp"));
        int level = data.getInt(data.getColumnIndexOrThrow("level"));
        points.add(new PointValue(timestamp, level));
    }
    data.close();
    if (points.size() == 0) {
        return null;
    }
    return points;
}

問題是,當您在if語句中調用data.moveToNext() ,您將移至第一個條目,然后在while循環中再次調用moveToNext() ,移至第二個不存在的條目。 嘗試刪除if語句

在if循環之前添加data.moveToFirst()。

Cursor data = rawQuery("SELECT * FROM history");
//add this line
data.moveToFirst();
if (data.moveToNext()) {

暫無
暫無

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

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