我创建了一个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.