如何在下载后使用数据库进行合并?

时间:2018-05-17 15:40:43

标签: java android ormlite

我使用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;
}

0 个答案:

没有答案