База данных моего приложения должна быть заполнена большим количеством данных,
поэтому во время onCreate()
это не только создание таблицы sql
инструкции, там много вставок. Я выбрал решение
сохранить все эти инструкции в файле sql, расположенном в res / raw и который
загружен с Resources.openRawResource(id)
.
Работает хорошо, но я сталкиваюсь с проблемой кодировки, у меня есть некоторые акценты
символы в файле sql, который появляется плохо в моем приложении. это
мой код для этого:
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);
}
Решение, которое я нашел, чтобы избежать этого, это загрузить инструкции sql
с огромного static final String
вместо файла, и все
подчеркнутые символы выглядят хорошо.
Но нет ли более элегантного способа загрузки инструкций sql, чем большой
static final String
атрибут со всеми инструкциями sql?