同时访问多个线程的SQLitedatabase

时间:2016-11-19 08:35:55

标签: java android multithreading

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

我的项目旨在使用employees在后​​台运行多个倒数计时器(不超过50个)。 在每一秒钟,我都要查询我的表格,并更新一些特定的列。

我的查询是getDate();换行,我正在Handler post delayed关闭数据库。 这种方法适用于单个线程,但一旦它成为多个线程, 它给我一个类似try catch的错误。

所以我提出不要关闭数据库,除非整个应用程序关闭。

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

1 个答案:

答案 0 :(得分:0)

来自the official docs

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

创建辅助对象以创建,打开和/或管理数据库。此方法总是很快返回。在调用getWritableDatabase()或getReadableDatabase()之一之前,实际上不会创建或打开数据库。

void close ()
  

关闭所有打开的数据库对象。

因此,您可能会意识到,获取SQLiteOpenHelper的实例与拥有可访问数据库的对象不同。您需要在您要创建的所有主题中管理您的单例实例,并尊重您对getWritableDatabase()getReadableDatabase()的调用。

修改

此外,Official SQLite Documentation中还说明,为了在多线程应用程序中使用,还需要进行其他设置。我不认为我不认为Android不是一个多线程环境,请参阅this answer please。为什么要突破障碍?坚持做得好。做进一步的研究。 Google首先。