所以我一直在尝试将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