寻找我在Android中遇到的SQLite错误的解决方案。基本上在某些情况下我运行插入查询,然后关闭我所在的活动并移动到下一个。关闭活动需要确保SQLiteDatabase已停止,因此活动中的onPause将停止数据库。
然而,我努力让应用程序等到交易完成。我看到存在一个SQLiteTransactionListener,但它的onCommit方法在提交之前被称为,在我的脑海中留下了可能性,在某些情况下我最终会遇到同样的问题。
如何在事务关闭时获得回调,以便延迟关闭数据库对象?
public void insertArrayList(SQLiteDatabase db, String Table, ArrayList<ArrayList<String>> tableData, Boolean clear) {
Logg.d("Start");
Cursor cols = db.rawQuery("select * from " + Table + " limit 0",null);
db.beginTransaction();
try {
if (clear) {db.execSQL("delete from " + Table);}
int Xtra = cols.getColumnCount() - tableData.get(0).size();
for (ArrayList<String> item : tableData) {
for (int a=0;a<Xtra;a++) {item.add("");}
db.execSQL("insert into " + Table + " values " + rowValues(item) + ";");
//Logg.i("insert into " + Table + " values " + rowValues(item) + ";");
}
db.setTransactionSuccessful();
} catch (Exception e) {
Logg.e("Error: " + e.getMessage());
} finally {
db.endTransaction();
Logg.d("Finish");
}
}
活动onPause覆盖:
@Override
public void onPause() {
if (db != null) {
Logg.d("SQLite db closing");
db.close();
}
super.onPause();
}
答案 0 :(得分:1)
不要停止数据库!使用存储在自定义应用程序类中的相同数据库。只要应用程序处于打开状态并在onTerminate()上关闭它,它就会打开。