为了简单起见,可以说,我在我的Android应用程序下面的类对象和DB类:是否有原因不从SQLiteOpenHelper DB类而不是从Cursor返回MyClass的初始化ArrayList?
public class MyObject{
private String title;
private double number;
}
public class MyObjectDB extends SQLiteOpenHelper {
public static final String COL_1 = "ID";
public static final String COL_2 = "TITLE";
public static final String COL_3 = "NUMBER";
典型的例子只是使用以下方法来从 返回游标对象的DB类,然后将光标是活动等内使用..
public Cursor getAllData() {
SQLiteDatabase db = this.getWritableDatabase();
return db.rawQuery("select * from "+TABLE_NAME,null);
}
对于小数据集有没有理由不只是初始化并返回 类的ArrayList直接从DB类的对象,假设我需要 列表即使是空的?
public ArrayList<MyObject> getMyObjectList(){
SQLiteDatabase db = this.getWritableDatabase();
Cursor res = db.rawQuery("select * from "+TABLE_NAME,null);
ArrayList<MyObject> list = new ArrayList<>();
if(res.getCount()!=0){
res.moveToFirst();
while (!res.isAfterLast()){
MyObject myObj = new MyObject();
myObj.setTitle(res.getString(1));
myObj.setNumber(res.getDouble(2));
list.add(myObj);
res.moveToNext();
}
}
res.close();
return list;
}
我只是想确定是否有一个原因,所有的例子总是返回游标,然后必须从调用活动中使用初始化列表。如果Activity可以直接调用一个方法来返回它所需的列表,那么Activity中的代码会更清晰,而不必在Activity中执行完全相同的逻辑。
这是唯一有点类似的问题,我的话题发现: Object oriented design with database (java): cursors, SQLiteOpenHelper
编辑:为什么它可能更好地返回游标,而不是ArrayList的另外一个想法 - 在我固然有限了解这一点,似乎内存中Cursor对象的生命周期非常明确,并在调用cursor.close()时释放。相比之下,如果初始化并返回一个类对象列表,然后直接将其分配给调用类中的某个字段,那么返回的对象可能不会从内存中释放,因为您持有该引用。我想我的问题仍然存在,如果你的意图是持有表示所有数据的ArrayList,那么它是否会导致性能差异。也许还有其他的注意事项,因为当你返回新的ArrayList时,你将分配一个对新List的引用,而不是直接修改你最初声明的那个,就像你返回一个Cursor一样。 - 我承认对Java的这种工作方式知之甚少(我的理由是这么说),所以如果在这里有任何不正确的信息,我很抱歉。