有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java同时访问多线程的SQLITE数据库

我目前正在为我的项目开发一个安卓应用程序

我的项目目标是使用Handler post delayed在后台运行多个倒计时计时器(不超过50个)。 每隔一秒钟,我都要查询我的表,以便对某些特定的列进行fecth和更新

我的查询以try catch结尾,我正在finally关闭数据库。 这种方法适用于单个线程,但一旦它变成多个线程, 它给我一个类似the database is already close but morethan one thread is trying to access it的错误

所以我想出了一个主意,除非关闭整个应用程序,否则不要关闭数据库

所以我的问题是,我应该按照我的想法去做吗?还是有更好的方法


共 (1) 个答案

  1. # 1 楼答案

    the official docs

    SQLiteOpenHelper (Context context, 
                    String name, 
                    SQLiteDatabase.CursorFactory factory, 
                    int version)
    

    Create a helper object to create, open, and/or manage a database. This method always returns very quickly. The database is not actually created or opened until one of getWritableDatabase() or getReadableDatabase() is called.

    以及:

    void close ()
    

    Close any open database object.

    因此,正如您可能理解的那样,获取SQLiteOpenHelper的实例与拥有一个可以访问数据库的对象不同。您需要分别管理要创建的所有线程的单例实例,以及对getWritableDatabase()getReadableDatabase()的调用

    编辑

    此外,在Official SQLite Documentation中还指出,为了在多线程应用程序中使用,还需要进行额外的设置。我不认为我必须说Android不是为多线程环境而设计的,参见this answer please。你为什么要设置障碍?坚持太好的做法。做进一步的研究。谷歌优先