解决多线程并发访问SQLite数据库
来源:互联网 发布:js代码解压缩工具 编辑:程序博客网 时间:2024/05/21 12:08
java.lang.IllegalStateException: attempt to re-open an already-closed object
使用单例实现:如下
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteOpenHelper;
- import java.util.concurrent.atomic.AtomicInteger;
- /**
- *多线程下调用SQLite
- *
- * @author daniel
- *
- */
- public class DBManager {
- //解决多线程并发
- private AtomicInteger mOpenCounter = new AtomicInteger();
- private static DBManager instance;
- private static SQLiteOpenHelper mDatabaseHelper;
- private SQLiteDatabase mDatabase;
- private DBManager(){
- }
- /**
- * 初始化
- * @param helper
- */
- public static synchronized void initializeInstance(SQLiteOpenHelper helper) {
- if (instance == null) {
- instance = new DBManager();
- mDatabaseHelper = helper;
- }
- }
- /**
- * 获得当前实例对象
- * @return
- */
- public static synchronized DBManager getInstance() {
- if (instance == null) {
- throw new IllegalStateException(
- DBManager.class.getSimpleName()
- + " is not initialized, call initializeInstance(..) method first.");
- }
- return instance;
- }
- /**
- * 打开数据库对象
- * @return
- */
- public synchronized SQLiteDatabase openDatabase() {
- if (mOpenCounter.incrementAndGet() == 1) {
- // Opening new database
- mDatabase = mDatabaseHelper.getWritableDatabase();
- }
- return mDatabase;
- }
- /**
- * 多线程下关闭
- */
- public synchronized void closeDatabase() {
- if (mOpenCounter.decrementAndGet() == 0) {
- // Closing database
- mDatabase.close();
- }
- }
- }
转载自http://blog.csdn.net/dingsai88/article/details/41676373
阅读全文
0 0
- 解决多线程并发访问SQLite数据库
- 多线程如何并发访问SQLite数据库?
- 解决Android中的SQLite数据库并发访问
- 解决Android中的SQLite数据库并发访问
- SQLite数据库并发访问
- 多线程环境下SQLite数据库并发访问的解决方案
- 防止多线程并发访问SQLite。
- sqlite能不能多线程并发访问
- 解决Android多线程访问SQLite数据库死锁问题
- Sqlite数据库多线程并发问题
- SQLite在多线程并发访问的应用
- Android sqlite数据库并发访问问题处理
- Android中Sqlite数据库多线程并发问题
- Android中Sqlite数据库多线程并发问题
- Android中Sqlite数据库多线程并发问题
- Android中Sqlite数据库多线程并发问题
- Android中Sqlite数据库多线程并发问题
- 7.sqlite数据库多线程访问安全问题
- Mac ch常用命令与管理
- KBEngine调研报告(转)
- php实现简单记事本功能
- setTimeout延时0s
- org.springframework.beans.factory.NoSuchBeanDefinitionException错误解决原因
- 解决多线程并发访问SQLite数据库
- sklearn-Preprocessing
- [Flink]Flink1.3 Stream指南三 窗口分配器
- SSM框架-SpringMVC 实例文件上传下载
- 分布式与集群的联系与区别
- 手把手入门神经网络系列(1)_从初等数学的角度初探神经网络
- easyui session过期后,登录窗口出现在子窗口解决方法
- gulp1.4.0使用笔记
- Android中关于文件路径的问题