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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (42)

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

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;
    }
提问于
用户回答回答于

尝试从getDatabase方法中移除同步操作。这不应该是必要的。

用户回答回答于

在您所链接的设计模式中,它们的方法是确保只有一个数据库助手实例存在于您的应用程序生命周期中。您的方法是不同的,您试图确保只有一个SQLiteDatabase实例存在。您正在getDatabase方法中创建DatabaseHelper的新实例,当然,您的数据库Instance是静态的,但是这里的SQLiteOpenHelper实例存在潜在的问题。

扫码关注云+社区