Erstellen einer Android App-Datenbank mit großen Datenmengen
Die Datenbank meiner Bewerbung muss mit vielen Daten gefüllt sein, also währendonCreate()
Es gibt nicht nur einige SQL-Anweisungen zum Erstellen von Tabellen, sondern auch viele Einfügungen. Die von mir gewählte Lösung besteht darin, alle diese Anweisungen in einer SQL-Datei zu speichern, die sich in res / raw befindet und mit der geladen wirdResources.openRawResource(id)
.
Es funktioniert gut, aber ich stehe vor Codierungsproblemen. Ich habe einige akzentuierte Zeichen in der SQL-Datei, die in meiner Anwendung als schlecht erscheinen. Dies ist mein Code, um dies zu tun:
public String getFileContent(Resources resources, int rawId) throws
IOException
{
InputStream is = resources.openRawResource(rawId);
int size = is.available();
// Read the entire asset into a local byte buffer.
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
// Convert the buffer into a string.
return new String(buffer);
}
public void onCreate(SQLiteDatabase db) {
try {
// get file content
String sqlCode = getFileContent(mCtx.getResources(), R.raw.db_create);
// execute code
for (String sqlStatements : sqlCode.split(";"))
{
db.execSQL(sqlStatements);
}
Log.v("Creating database done.");
} catch (IOException e) {
// Should never happen!
Log.e("Error reading sql file " + e.getMessage(), e);
throw new RuntimeException(e);
} catch (SQLException e) {
Log.e("Error executing sql code " + e.getMessage(), e);
throw new RuntimeException(e);
}
Die Lösung, die ich gefunden habe, um dies zu vermeiden, ist das Laden der SQL-Anweisungen von einem riesigenstatic final String
Anstelle einer Datei werden alle akzentuierten Zeichen gut angezeigt.
Aber gibt es nicht eine elegantere Möglichkeit, SQL-Anweisungen zu laden als eine große?static final String
Attribut mit allen SQL-Anweisungen?