OrmLite同时写入多个数据库

时间:2013-10-11 19:27:42

标签: android multithreading concurrency ormlite

我在Android的OrmLite示例中使用了“HelloTwoDbs”示例来同时检查双数据库的使用情况。

假设我使用OrmLite设置了多个数据库,我可以同时在两个不同的数据库中写入而没有问题吗?它每个数据库只有“一次写入一个线程”,但两个写入线程(每个数据库一个)将同时执行。

我实际上在一个模拟器中使用下面的代码进行了测试并且没有任何问题,但是如果OrmLite实际上真的支持它并且不会导致我未来出现问题,那么我仍然不安全。

顺便说一句,我倾向于使用两种不同的数据库方法,因为我想做一个小型的社交互动应用程序,我想从应用程序静态内容中删除用户生成的内容有几个原因,主要是因为用户生成的内容得到了同步和修改的方式比应用程序静态内容更快。此外,有两个数据库,我可以同时从不同的源同时更新两个内容到不同的数据库,或者我希望如此。

请尽可能帮助我。 =)


我根据网站示例进行的小测试,只是在HelloTwoDbs.java上调用“doOtherStuff”:

已添加 - >

private void doOtherStuff() {

new Thread(new Runnable() {
    @Override
    public void run() {
        Log.e(LOG_TAG, "Started 1");

        final DatabaseHelper1 databaseHelperA = getHelper1();

        try {

            final Dao<SimpleData, Integer> simpleDao = databaseHelperA.getSimpleDataDao();

            for (int i = 0; i < 5000; i++) {
                Log.e(LOG_TAG, "Adding (1): " + i);
                simpleDao.create(new SimpleData(i));

            }
        } catch (SQLException e) {
        }
    }
}).start();

new Thread(new Runnable() {
    @Override
    public void run() {
        Log.e(LOG_TAG, "Started 2");

        final DatabaseHelper2 databaseHelperB = getHelper2();

        try {

            final Dao<ComplexData, Integer> complexDao = databaseHelperB.getComplexDataDao();

            for (int i = 0; i < 5000; i++) {
                Log.e(LOG_TAG, "Adding (2): " + i);
                complexDao.create(new ComplexData(i));

            }
        } catch (SQLException e) {
        }
    }
}).start();
}

1 个答案:

答案 0 :(得分:1)

  

假设我使用OrmLite设置了多个数据库,我可以同时在两个不同的数据库中写入而没有问题吗?

我会这么认为,是的。实际上,您可以使用多个线程写入单个数据库。 SQLite执行数据库级锁定,因此第二个线程将等到第一个操作完成。

如果您有多个连接打开相同的数据库,那么您将遇到问题的唯一时间。如果是这种情况,您将获得数据损坏。