是否可以通过ContentValue将自定义类对象的列表插入sqlite数据库?有没有足够快的替代方法呢?

时间:2018-09-17 15:36:24

标签: android database sqlite

我正在开发android应用程序。 我有很多从服务器获取的复杂数据。首次登录时,我必须将所有数据插入本地sqlite数据库。我发现通过ContentValues保存是最快的方法,但是自定义类存在问题。

for (final CustomClass r : myObjects) {

 ContentValues values = new ContentValues();
values.put("ID", r.getId());
Cache.OpenDatabase().insert("Database",null,values);
}

class CustomClass {
int id;
ClassB my_class;
List<ClassC> my_list;
}

将此类数据插入sqlite数据库的最佳方法是什么?该for循环大约旋转1000次。请给我一些提示!

1 个答案:

答案 0 :(得分:0)

SQLite不支持直接保存对象,所有内容都必须存储为INTEGER(最多64位带符号,因此为int和long),TEXT(字符串),REAL(8字节IEEE浮点数),NULL或a BLOB(字节数组)。

有些扩展,例如ROOM基本上是SQLite的包装程序(抽象层),可简化对象处理。

但是,通过将循环嵌入事务中,可以加快循环速度:-

SQLiteDatabase db = Cache.OpenDatabase(); //<<<<<<<<<< Outside of the loop as only needed once
db.beginTransaction();
for (final CustomClass r : myObjects) {
    ContentValues values = new ContentValues();
    values.put("ID", r.getId());
    db.insert("Database",null,values);
}
db.setTransactionSuccessful();
db.endTransaction();