所以我一直在嘗試將SQLite數據庫的內容轉換爲ArrayList中的對象。爲了做到這一點,我試着像下面的代碼一樣遍歷表格。但是這並不會返回指定主題的每個標記,而是會在表格中迭代大約70-80次。我想我知道這個問題,因爲c.moveToNext移動到下一行而不是下一行,但我不知道解決方案。將SQLite數據庫轉換爲Java Arraylist
public ArrayList<Marks> toMarksList(String subject){
ArrayList<Marks> marksArrayList = new ArrayList<Marks>();
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_MARKS + " WHERE " + COLUMN_SUBJECT + "=\"" + subject + "\";";
Cursor c = db.rawQuery(query, null);
c.moveToFirst();
while(!c.isAfterLast()){
if(c.getColumnIndex("subject")!=0){
String dbName = c.getString(c.getColumnIndex("name"));
Double dbValue = c.getDouble(c.getColumnIndex("value"));
Double dbWeight = c.getDouble(c.getColumnIndex("weight"));
marksArrayList.add(new Marks(subject, dbName, dbValue, dbWeight));
}
c.moveToNext();
}
db.close();
return marksArrayList;
}
此代碼似乎嚴重損壞,因爲它也可能得到錯誤的名稱在數據庫中的第三項,但onnly在while循環的前半部分。我該如何做到這一點,所以光標在一行,讀取該行所需的條目,然後繼續到下一行?
編輯:原來我是完全愚蠢的,每次啓動應用程序時不斷向列表中添加新條目。
你應該通過你的主題作爲參數來防止SQL注入。 – leeor
@MrQweep此代碼看起來很好,除了一行'if(c.getColumnIndex(「subject」)!= 0)'沒有使用這一行。 'c.moveToNext'也會移動到下一行,而不是下一列。發佈您的預期結果和實際結果 –
嘗試使用命令行sqlite程序檢查數據庫。這可能是因爲數據不準確。 – mksteve