Ich habe eine alte Datenbank mit der nächsten Struktur: Database structureWie kann ich die Raumpersistenz-Datenbank in Android belegen?
Die Frage ist, was der beste Weg ist, Datenbank zu erstellen und füllen Tabellen in Raum Persistenz. Die Art und Weise, wie ich es jetzt mache, ist das Speichern von Tabellendaten in strings.xml und das Einfügen in die Datenbank mit firstrun.
public void createDb(final Context context) {
mIsDatabaseCreated.setValue(false);
prefs = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
boolean isFirstRun = prefs.getBoolean(prefKey, true);
Observable.just(Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, AppDatabase.DATABASE_NAME).build())
.map(appDatabase1 -> DatabaseInitUtil.initializeDb(
appDatabase1,
context.getResources().getStringArray(R.array.themes),
isFirstRun))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(appDatabase -> {
mDb = appDatabase;
mIsDatabaseCreated.setValue(true);
});
prefs.edit().putBoolean(prefKey, false).apply();
}
static AppDatabase initializeDb(AppDatabase appDatabase, String[] themes, boolean isFirstRun) {
if (isFirstRun) {
List<ThemeEntity> themesEntities = new ArrayList<>(themes.length);
generateData(themesEntities, themes);
return insertData(appDatabase, themesEntities);
} else {
return appDatabase;
}
}
private static void generateData(List<ThemeEntity> themesEntities, String[] themes) {
for (String theme : themes) {
ThemeEntity themeEntity = new ThemeEntity();
themeEntity.setTheme(theme);
themesEntities.add(themeEntity);
}
}
<string-array name="themes">
<item>@string/courage</item>
<item>@string/death</item>
<item>@string/forgiveness</item>
<item>@string/faith</item>
<item>@string/family</item>
<item>@string/encouragement</item>
<item>@string/friendship</item>
<item>@string/joy</item>
<item>@string/life</item>
<item>@string/love</item>
<item>@string/relationship</item>
<item>@string/strength</item>
</string-array>
Aber ich denke, dass Speichern von großen Daten in Strings-Arrays und bekommen es mit dem ersten Lauf ist es nicht richtig.
https://issuetracker.google.com/issues/62185732 – CommonsWare
Vielen Dank für Ihre Antwort . Ich denke in manchen Fällen kann das helfen. Aber was, wenn ich keine alte Datenbank hätte? Gibt es eine richtige Lösung, um eine Datenbank mit einer großen Datenmenge zu füllen? –
"Aber was wäre, wenn ich keine alte Datenbank hätte?" - Um, erstelle es. Es ist viel effizienter, eine vorbelegte Datenbank zu versenden, als eine leere Datenbank zu "versenden" und dann Transaktionen auszuführen, um sie zu füllen. SQLite-Tools sind für jede Plattform verfügbar, von der Befehlszeile "sqlite3" -Binärdateien über Desktop-Tools bis hin zu Browser-Plugins. – CommonsWare