SQLiteDatabase rawQuery挂起

时间:2015-07-13 21:45:22

标签: android sqlite locking android-sqlite

我创建了一个Android IntentService,它从远程服务器下载数据并存储在SQLiteDatabase中。当我第一次运行服务时,一切都运行完美,但第二次尝试运行它最终挂起,我不太清楚为什么。

c = db.rawQuery("SELECT * FROM abc WHERE def = ? AND ghi = 1", new String[]{Integer.toString(uid)});

这就是它挂起的那条线,所以我感觉它与数据库被锁定有关,它等待解锁,但我可能完全错了。我之前一直在获得锁定异常,但它们似乎已经消失了。它与查询无关,需要一段时间才能执行,因为通常它会立即执行,我在第二次运行时等了5分钟,它仍然挂起

DatabaseHelper.java

public class DatabaseHelper extends SQLiteOpenHelper {

Context context;
private SQLiteDatabase mDatabase;


public DatabaseHelper(Context context) {
    super(context, DB_NAME, null, 10);
    this.context = context;
}

public SQLiteDatabase getDB() {
    if ((mDatabase == null) || (!mDatabase.isOpen())) {
        mDatabase = this.getWritableDatabase();
    }

    return mDatabase;
}

MyApplication.java

public class MyApplication extends Application {

public static DatabaseHelper helper;
public static SQLiteDatabase database;


public MyApplication() {
    super();
}

@Override
public void onCreate(){
    super.onCreate();
    helper = new DatabaseHelper(this);
    database = helper.getWritableDatabase();
}

@Override
public void onTerminate() {
    super.onTerminate();
    if (database != null && database.isOpen()) {
        database.close();
    }
}

}

使用MyApplication中的一个数据库对象完成所有数据库访问。 任何对查询挂起的见解都将不胜感激。

logcat的

The connection pool for database '/data/data/abc/databases/def.sqlite' has been unable to grant a connection to thread 1897 (IntentService[SyncService]) with flags 0x1 for 270.01202 seconds.

0 个答案:

没有答案