在SQLite中使用事务在JellyBean中给出错误

时间:2013-04-02 10:05:07

标签: android multithreading sqlite transactions

我有一个DownLoadData类,它扩展了异步任务,用于从Web服务下载主数据。 SQLite数据库中有10个主表,每个表都需要单独的Web服务调用。因此,在DownLoadData任务中,我有10个线程。每个人都会调用相应的Web服务,接收数据,然后将其插入相应的表中。

我在_onPreExecute()_启动交易,在检查所有线程是否已完成后,我在_onPostExecute()_结束交易。

问题是,这种方法适用于直到ICS的版本。它似乎在JellyBean中不起作用。该应用程序每隔60秒就会挂起此logcat消息:

04-02 14:53:23.263: W/SQLiteConnectionPool(1409): The connection pool for database '/data/data/com.c2info.liveorder/databases/DB' has been unable to grant a connection to thread 117 (AsyncTask #2) with flags 0x1 for 30.010002 seconds.

04-02 14:53:23.263: W/SQLiteConnectionPool(1409): Connections: 0 active, 1 idle, 0 available.

我开始和结束这样的交易:

public LocalDatabase beginTransact() {

  mdbHelper = new DatabaseHelper(ctx);
  mdb = mdbHelper.getWritableDatabase();
  execSQL("BEGIN");
  return this;
}

public void endTransact() {

  execSQL("END");
  mdbHelper.close();
}

我也在所有线程中使用相同的数据库实例。

1 个答案:

答案 0 :(得分:0)

我通过将每个单独的线程视为单个事务而不是所有线程的单个事务来克服JellyBean中的问题