我在阅读StackOverflow关于这个问题的文章,但我仍然没有找到解决方案.我注意到有时,我的应用程序会抛出以下错误:

   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)
        ...

我有一个名为DatabaseHelper.java的文件,使用此方法获取它的一个实例:

public static DatabaseHelper getInstance(Context context) {
    if (mInstance == null) {
        mInstance = new DatabaseHelper(context.getApplicationContext());
    }
    return mInstance;
}

然后我有像这样的方法(它在第cursor.moveToFirst()行崩溃,并出现了那个错误).它几乎从来不会坠毁,但有时会坠毁.

public Profile getProfile(long id) {
    SQLiteDatabase db = this.getReadableDatabase();

    String selectQuery = "SELECT * FROM " + TABLE_PROFILES + " WHERE " + KEY_PROFILES_ID + " = " + id;
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    Profile profile = new Profile();
    if (cursor.moveToFirst()) {
        doWhatEver();
    }
    cursor.close();
    db.close();

    return profile;
}

就这样,在我使用的所有方法中:

SQLiteDatabase db = this.getReadableDatabase(); (or Writable)

然后我关闭光标和数据库.在本例中,行中抛出错误:

cursor.moveToFirst();

如果我之前拨打this.getReadableDatabase(),我不明白为什么错误提示数据库已关闭.请支持!谢谢您:)

推荐答案

删除

db.close();

如果在关闭数据库后try 另一个操作,则会出现该异常.

documentation人说:

释放对对象的引用,closing the object...

还有,看看

Database相关问答推荐

在使用FT.AGGREGATE聚合数据时,如何在Redis上解析ISO 8601时间?

如何正确创建mongo模型和客户端?

Postgresql 服务器:允许访问私有网络内的远程连接,而不是外部网络

存储具有公共链接但 ID 很长的用户文件是否安全?

mysql数据库自动分区

仅对表中的一列授予更改

函数到关系映射比对象到关系更容易吗?

如何手动卸载 Oracle?

WAMP 的 MySQL 数据库文件位于何处?

使用 SQLAlchemy Core 批量插入列表值

Oracle 数据库统计信息应该多久运行一次?

寻找基于磁盘的类 redis 数据库

South migration error: NoMigrations exception for django.contrib.auth

为什么有人需要内存数据库?

归档实时 MySQL 数据库的最佳方式

如果表不存在,如何使用 Derby Db 创建表

Sqlite 和 Python - 使用 fetchone() 返回字典?

SQL - 如何使用 MS SQL 2008 R2 备份数据库并导出为 MDF 文件

为什么关系数据库存在可伸缩性问题?

如何更正此 sql 连接上的相关名称?