数据库操作的异常Cannot perform this operation because the connection pool has been close

lionfresh 2014-09-11 09:49:09
异常日志如下:

Caused by: java.lang.IllegalStateException: Cannot perform this operation because the connection pool has been closed.
at android.database.sqlite.SQLiteConnectionPool.throwIfClosedLocked(SQLiteConnectionPool.java:962)
at android.database.sqlite.SQLiteConnectionPool.waitForConnection(SQLiteConnectionPool.java:599)
at android.database.sqlite.SQLiteConnectionPool.acquireConnection(SQLiteConnectionPool.java:348)
at android.database.sqlite.SQLiteSession.acquireConnection(SQLiteSession.java:894)
at android.database.sqlite.SQLiteSession.executeForCursorWindow(SQLiteSession.java:834)
at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:62)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:143)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:196)
at android.database.AbstractCursor.moveToNext(AbstractCursor.java:244)


我知道这是数据库连接被关闭导致的,但是怎么解决这个问题呢,网上能找到的解决办法都试了,还是会报这个问题,请教高人指点!
...全文
7093 16 打赏 收藏 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxdaxu 2016-04-03
  • 打赏
  • 举报
回复
contentprovider中使用过数据库不能关闭,其他程序才可以通过这个provider访问数据
Leon_He2014 2015-11-20
  • 打赏
  • 举报
回复
db = new DBHelper().getWritableDatabase();//每次创建新的对象来获取db 每次都new 新的SQLiteOpenHelper子类对象来获取db,就不会报这个错了
lyennon 2014-12-10
  • 打赏
  • 举报
回复
同遇到这个问题,请问是怎么解决的
lionfresh 2014-09-13
  • 打赏
  • 举报
回复
问题解决,是嵌套获取了数据库实例,而在里层实例使用完后,关闭了数据库,导致外层调用时出错。
windsunmoon 2014-09-12
  • 打赏
  • 举报
回复
sqllite 是不支持多线程 同时 读写的,是不是这个问题?
sagittarius1988 2014-09-11
  • 打赏
  • 举报
回复
引用 7 楼 lionfresh 的回复:
[quote=引用 6 楼 sagittarius1988 的回复:] [quote=引用 3 楼 lionfresh 的回复:] [quote=引用 1 楼 sagittarius1988 的回复:] 那就在使用后才关闭啊
都是使用后关闭的。[/quote] 加个锁[/quote] 加了也没用。[/quote] close操作单独拎出来一个接口,断点调试,就知道具体是哪里把这个连接给关了
lionfresh 2014-09-11
  • 打赏
  • 举报
回复
引用 6 楼 sagittarius1988 的回复:
[quote=引用 3 楼 lionfresh 的回复:] [quote=引用 1 楼 sagittarius1988 的回复:] 那就在使用后才关闭啊
都是使用后关闭的。[/quote] 加个锁[/quote] 加了也没用。
sagittarius1988 2014-09-11
  • 打赏
  • 举报
回复
引用 3 楼 lionfresh 的回复:
[quote=引用 1 楼 sagittarius1988 的回复:] 那就在使用后才关闭啊
都是使用后关闭的。[/quote] 加个锁
lionfresh 2014-09-11
  • 打赏
  • 举报
回复
引用 2 楼 heaimnmn 的回复:
是不是没有关闭cursor,然后再次访问造成的异常
我每次操作数据库完成后,都是先关闭cursor,再关闭db.
lionfresh 2014-09-11
  • 打赏
  • 举报
回复
现在将这部分数据库操作放在服务中执行,就不会有问题,但是为什么呢?没有线程访问冲突的问题。
lionfresh 2014-09-11
  • 打赏
  • 举报
回复
引用 1 楼 sagittarius1988 的回复:
那就在使用后才关闭啊
都是使用后关闭的。
哎,真难 2014-09-11
  • 打赏
  • 举报
回复
是不是没有关闭cursor,然后再次访问造成的异常
sagittarius1988 2014-09-11
  • 打赏
  • 举报
回复
那就在使用后才关闭啊
  • 打赏
  • 举报
回复
放线程里有问题,放服务里没问题? 是不是线程没执行完(数据库没来得及close)就强制结束了。
lionfresh 2014-09-11
  • 打赏
  • 举报
回复
怎么能沉呢..
sky-Z 2014-09-11
  • 打赏
  • 举报
回复
光这么点代码难办啊,最好能描述下db的使用的流程

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧