Как перезагрузить базу данных после копирования из папки RAW?Android

Форум для тех, кто программирует под Android
Anonymous
Как перезагрузить базу данных после копирования из папки RAW?

Сообщение Anonymous »

В настоящее время я создаю приложение с базами данных и пытаюсь найти решение, как мне кажется, простой проблемы.
Я инициализирую базы данных с помощью :
// First database, no problems
DatabaseHelper currencyDatabase = new DatabaseHelper(context, "currencies.db", 1, new String[]{TABLE_CURRENCIES}, new String[]{
"CREATE TABLE IF NOT EXISTS " + TABLE_CURRENCIES + "(" +
CURRENCIES_ID + " TEXT PRIMARY KEY," +
CURRENCIES_NAME + " TEXT," +
CURRENCIES_SYMBOL + " REAL," +
CURRENCIES_NATIVE + " TEXT," +
CURRENCIES_CODE + " INTEGER," +
CURRENCIES_PLURAL + " TEXT" +
")"

});
currencyDatabase.copyDatabaseFromRaw(currencyDatabase.getReadableDatabase(), R.raw.currencies);
currenciesDatabase = currencyDatabase.getWritableDatabase();
currenciesList = getCurrenciesList();
currencyModels = getCurrencies();


Здесь и валютный список, и валютная модель пусты.
Проблема не в самом запросе в базе данных, потому что он работает со второго раза. Проблема в том, что после копирования базы списки пусты, а при создании/копировании баз приложение вылетает, при перезапуске все работает нормально.
DatabaseHelper просто< /p>
public static final String DATABASE_NAME = "database.db";
public static final String COLUMN_ID = "_id";
public static int DATABASE_VERSION = 1;
public static String[] TABLE;
private static String[] CREATE_TABLE;
private Context context;

public DatabaseHelper(Context context, boolean addID) {
this(context, DATABASE_NAME, DATABASE_VERSION, "", "", addID);
CREATE_TABLE = new String[]{};
this.context = context;
}

public DatabaseHelper(Context context, String databaseName, int databaseVersion, String[] table, String[] tableColumns) {
super(context, databaseName.endsWith(".db") ? databaseName : databaseName + ".db", null, databaseVersion);
TABLE = table;
DATABASE_VERSION = databaseVersion;
CREATE_TABLE = tableColumns;
this.context = context;
}

public DatabaseHelper(Context context, String databaseName, int databaseVersion, String table, String tableColumns, boolean addID) {
super(context, databaseName.endsWith(".db") ? databaseName : databaseName + ".db", null, databaseVersion);
TABLE[0] = table;
DATABASE_VERSION = databaseVersion;
CREATE_TABLE[0] = buildTable(tableColumns, addID, table);
this.context = context;
}

public void copyDatabaseFromRaw(SQLiteDatabase db, @RawRes int rawID) {
InputStream myInput = null;
OutputStream myOutput = null;

db.beginTransactionNonExclusive();
try {
myInput = context.getResources().openRawResource(rawID);
myOutput = Files.newOutputStream(Paths.get(db.getPath()));
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
} catch (IOException e) {
e.printStackTrace();
throw new Error("copyDatabaseFromRaw" + " Error copying database");
} finally {
try {
if (myOutput != null) {
myOutput.close();
}
if (myInput != null) {
myInput.close();
}
} catch (IOException e) {
e.printStackTrace();
throw new Error("copyDatabaseFromRaw" + " Error closing streams");
}
}
}

@Override
public void onCreate(SQLiteDatabase db) {
for (String s : CREATE_TABLE) {
db.execSQL(s);
}
}

private String buildTable(String columns, boolean addID, String table) {
if (StringUtils.isEmpty(columns)) {
return "CREATE TABLE " + table + (addID ? "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT)" : "");
} else {
return "CREATE TABLE " + table + (addID ? "(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " : "") + columns + ")";
}
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}


Подробнее здесь: https://stackoverflow.com/questions/788 ... raw-folder

Вернуться в «Android»