我使用Ormlite作为我的Android应用程序来存储我的数据。我想从站点下载数据库,然后程序检查数据库是否存在。如果存在数据库,则应合并新数据库和旧数据库。 这是我的问题。在Ormlite中你创建了一个Dao来与数据库的表进行交互,我想知道,下载后如何与新数据库进行交互?
例如: 应用程序中的数据库A包含以下项目:
奶酪,鸡蛋,牛奶,鸡肉
下载的数据库B包含以下项目:
奶酪,鸡蛋,牛奶,面粉,面包
最后我要:
奶酪,鸡蛋,牛奶,面粉,面包,鸡肉,只留下一个数据库。
并澄清:是的,它存在问题"如何合并数据库"。
例如:
Android update - merge database contents?
但这不是我的问题。我想知道,如何使用Ormlite与新数据库进行交互。哪种方式存在,我可以访问新数据库?
编辑:
我尝试下载数据库,并保证版本始终高于旧数据库版本。因此,至少我认为,它将进入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;
}