Я использую Ormlite для своего приложения для Android, чтобы хранить свои данные. Я хочу загрузить базу данных с сайта, и после этого программа проверяет, существует ли база данных. Если база данных существует, то новая база данных и старая база данных должны объединиться.
Вот и моя проблема. В Ormlite вы создаете Dao для взаимодействия с таблицами базы данных, и я хотел знать, как я могу взаимодействовать с новой базой данных после загрузки?
Например:
База данных А из приложения содержит элементы:
Сыр, Яйца, Молоко, Курица
База данных B из загрузки содержит элементы:
Сыр, яйца, молоко, мука, хлеб
В конце хочу:
Сыр, яйца, молоко, мука, хлеб, курица и осталась только одна база данных.
И для уточнения: да, существуют вопросы "Как объединить базы данных".
Например:
Обновление Android - объединить содержимое базы данных?
Но это не моя проблема. Я хочу знать, как взаимодействовать с новой базой данных с помощью Ormlite. Какой способ существует, чтобы я мог получить доступ к новой базе данных?
Edit:
Я пытался загрузить базу данных и гарантировать, что версия всегда выше, чем старая версия базы данных. Поэтому, по крайней мере, то, что я думал, это будет идти в методе OnUpgrade и там я мог бы объединить базу данных. Но я только заменил старую базу данных.
Я также попытался создать второй OrmDBHelper с другим именем, поэтому после загрузки я мог использовать там методы. Но никаких ошибок или чего-либо еще.
Вот вспомогательный элемент базы данных из существующей базы данных, второй - тот же, за исключением имени.
public class OrmDbHelper extends OrmLiteSqliteOpenHelper {
public static final String LOG = OrmDbHelper.class.getName();
public static final String DB_NAME = "bestand.db";
public static final int DB_VERSION = 1;
public OrmDbHelper(Context context) {
super(context, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()
+ File.separator + DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
TableUtils.createTableIfNotExists(connectionSource, ScanItem.class);
TableUtils.createTableIfNotExists(connectionSource, BestandItem.class);
TableUtils.createTableIfNotExists(connectionSource, SettingsItem.class);
} catch (SQLException ex) {
Log.e(LOG, "Error Creating table", ex);
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
TableUtils.dropTable(connectionSource, ScanItem.class, true);
TableUtils.dropTable(connectionSource, BestandItem.class, true);
TableUtils.dropTable(connectionSource, SettingsItem.class, true);
TableUtils.createTable(connectionSource, ScanItem.class);
TableUtils.createTable(connectionSource, BestandItem.class);
TableUtils.createTable(connectionSource, SettingsItem.class);
} catch (SQLException ex) {
Log.e(LOG, "Error Updating table", ex);
}
}
public Dao<ScanItem, Integer> createScanItemDAO() {
try {
return DaoManager.createDao(connectionSource, ScanItem.class);
} catch (SQLException ex) {
Log.e(LOG, "Error Creating DAO for Todo class", ex);
}
return null;
}
public Dao<BestandItem, Integer> createBestandItemDAO() {
try {
return DaoManager.createDao(connectionSource, BestandItem.class);
} catch (SQLException ex) {
Log.e(LOG, "Error Creating DAO for Todo class", ex);
}
return null;
}
public Dao<SettingsItem, Integer> createSettingItemDAO() {
try {
return DaoManager.createDao(connectionSource, SettingsItem.class);
} catch (SQLException ex) {
Log.e(LOG, "Error Creating DAO for Todo class", ex);
}
return null;
}
}
А вот как я пытался получить доступ ко второй базе данных:
Доступ к первой базе данных работает, а ко второй - нет. Я даже проверил, работает ли загрузка второй базы данных.
public class OrmDataHelper {
private Dao<ScanItem, Integer> scanItemDAO;
private Dao<BestandItem, Integer> bestandItemDAO;
private Dao<SettingsItem, Integer> settingsItemsDAO;
public OrmDataHelper(Context context) {
OrmDbHelper ormDbHelper = new OrmDbHelper(context);
scanItemDAO = ormDbHelper.createScanItemDAO();
bestandItemDAO = ormDbHelper.createBestandItemDAO();
settingsItemsDAO = ormDbHelper.createSettingItemDAO();
}
public ArrayList<ScanItem> getAllScanItem() {
ArrayList<ScanItem> temp = null;
try {
temp = new ArrayList<>(scanItemDAO.queryForAll());
} catch (SQLException ex) {
ex.getMessage();
}
return temp;
}