从不同的进程访问SQLite

时间:2010-08-11 13:17:55

标签: sqlite blackberry

我正在开发一个使用SQLite作为主要数据存储方法的应用程序。我使用备用入口点为我的应用程序运行了两个进程。

我需要从两个不同的进程访问相同的数据库,但是现在我们所有的SQLite都不像服务器数据库引擎,它一次只能被访问一次。

我想知道当数据库被其他进程访问时是否有一种“锁定”数据库的方法,这样如果第二个进程同时尝试访问数据库,它将等到第一个进程完成后再尝试再次访问它。

如何处理这个问题?

1 个答案:

答案 0 :(得分:4)

如果还没有,请创建一个抽象数据库访问的类,并将其存储在RuntimeStore中。无论您要在哪里与SQLite接口,都可以使用存储它的GUID(RuntimeStore.get(long))获取对该类的引用,并按照您通常的方式同步该类(成员对象锁定,同步方法)。 p>

不要只使用维基百科样式的单例模式,因为它不是这个平台上各个进程的真正单例。

请参阅:

http://www.blackberry.com/developers/docs/5.0.0api/net/rim/device/api/system/RuntimeStore.html

样品:

class SQLManager {
    private static long GUID = 0xa178d3ce564cae69L; // hash of com.stackoverflow.SQLManager

    private SQLManager() {
        // ctor stuff here
    }

    public static SQLManager getInstance() {
        RuntimeStore rs = RuntimeStore.getRuntimeStore();

        SQLManager instance = rs.get(GUID);

        if (instance == null) {
            instance = new SQLManager();
            rs.put(GUID, instance);
        }

        return instance;
    }
}

您仍在使用单例“模式”本身,但是您在第一次getInstance调用时将对象实例存储在RuntimeStore中,然后使用您指定的GUID将其从RuntimeStore中拉出来。