Можно ли вставить список объектов пользовательских классов через ContentValue в базу данных sqlite? Есть ли достаточно быстрые альтернативы для этого? - PullRequest
0 голосов
/ 17 сентября 2018

Я занимаюсь разработкой приложения для 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? Это за цикл поворачивается около 1000 раз. Пожалуйста, дайте мне несколько советов!

1 Ответ

0 голосов
/ 17 сентября 2018

SQLite не поддерживает непосредственное сохранение объектов, все должно быть сохранено как INTEGER (до 64 бит, со знаком, как int и long), TEXT (String), REAL (8-байтовая IEEE с плавающей запятой), NULL или какBLOB (байтовый массив).

Существуют расширения, такие как ROOM , которые в основном представляют собой оболочки (уровень абстракции) для SQLite, которые упрощают обработку объектов.

Однако может ускоритьдо цикла for, встраивая цикл в транзакцию в соответствии с: -

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...