[英]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.