android - Android 上的随机 SQLiteConnectionPool 错误。如何避免?

标签 android sqlite

最近我开始在我的应用程序中遇到以下错误。这不在任何特定的地方,只有在循环所有数据读/写功能时我才能重现。它几乎出现在任何地方。

09-14 08:52:15.089: WARN/SQLiteConnectionPool(19268): The connection pool for database '/data/data/com.nnn/databases/data.db' has been unable to grant a connection to thread 1 (main) with flags 0x5 for 30.000002 seconds.
        Connections: 0 active, 1 idle, 0 available.

有什么办法可以避免这种情况吗?我知道不知何故我用尽了与数据库的所有连接? 我正在使用方法#1:http://www.androiddesignpatterns.com/2012/05/correctly-managing-your-sqlite-database.html

我的数据库代码如下所示:

public class DatabaseHelper extends SQLiteOpenHelper
{
    private final static String LOG_TAG = "com.nnnn.data.DatabaseHelper";
    private static final String DATABASE_NAME = "data.db";
    private static final int DATABASE_VERSION = 260;
    private static SQLiteDatabase databaseInstance;

    public DatabaseHelper()
    {
        super(MyApplication.Me, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public static synchronized SQLiteDatabase getDatabase()
    {
        if (databaseInstance == null) databaseInstance = (new DatabaseHelper()).getWritableDatabase();
        return databaseInstance;
    }

最佳答案

我从未见过这个错误。但是,我想指出,您没有使用您链接到的页面中的方法 #1,我确实认为您的实现给您带来了麻烦。

在您链接的设计模式中,他们的方法是确保在整个应用程序生命周期中只存在一个 DatabaseHelper 实例。您的方法不同,您试图确保在整个应用程序生命周期中只存在一个 SQLiteDatabase 实例。

因此,总而言之,您正在尝试为所有内容重用相同的数据库连接(这不是一个好主意,我强烈建议您更改这种方法),但实际上,我相信这种方法会导致一些问题SQLiteOpenHelper 和你的静态实例变量。

您正在 getDatabase 方法中创建 DatabaseHelper 的新实例,当然,您的 databaseInstance 是静态的,但是这里的 SQLiteOpenHelper 实例存在潜在问题。例如,假设 databaseInstance 实例已关闭并通过一段代码设置为 null。 Aka,有人在清理他们自己,那么下次调用 getDatabase() 时,您将创建一个新的数据库助手,更重要的是,一个新的 SQLiteOpenHelper。

关于android - Android 上的随机 SQLiteConnectionPool 错误。如何避免?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12426060/

相关文章:

android - 我可以以某种方式将位置数据嵌入到 android 中的视频文件中吗?

Android,XML解析类似于E4X?

python - Flask SQL 没有这样的表

php - 如何在 Ubuntu 13.10 上安装 PHP PECL 扩展 "SQLite"

java - 这段代码是 ORM 的正常行为吗?

android - 在后台运行 Android 应用程序的良好做法

android - 适用于 Android 的 Facebook SDK 3.7 请求电子邮件权限

android - 回收者 View 中的动态网格布局

python - 如何检查 2 个数据库是否打开或关闭(一个在 sqlite3 中,另一个在 MySQL 中)- Python 3.3?

java - 创建使用 Sqlite DB 的 eclipse 项目的 .jar