Это произошло впервые, как только я закончил с выполнением запросов, соединение с базой данных закрывается. В следующем коде, сразу после первого цикла, когда я пытаюсь выполнить больше запросов, я получаю сообщение о том, что соединение с базой данных уже закрыто. Если я вручную снова открою базу данных, тогда код будет работать нормально, т. Е. Запросы выполняются без каких-либо ошибок.
Почему база данных закрывается, когда я этого не делаю?
openDB() и closeDB() открывают и закрывают соединение с базой данных.
Код: http://pastie.org/5587804#32,34
public void insertCheckedValuesInTable(int test_id,
ArrayList> checkedValues) {
//TODO Auto-generated method stub
openDB();
//first collect all the values then insert
//insert test_id, Q_id , correct answer and submitted answer in table
//testAnswerSubmitted
for (int i = 0; i < checkedValues.size(); i++) {
int Q_id = getQ_id(checkedValues.get(i).get(0).toString().trim());
String correctAns = getCorrectAnswer(
test_id,
Integer.parseInt(checkedValues.get(i).get(0).toString()
.trim()));
String submittedAns = checkedValues.get(i).get(1).toString().trim();
int marksObt;
Log.e("value " + i, correctAns.equalsIgnoreCase(submittedAns) + "");
//get marks
if (correctAns.equalsIgnoreCase(submittedAns)) {
//= marks for this question;
Cursor cur = myDataBase.rawQuery(
"(SELECT Marks FROM testQuestionBank WHERE Test_id ="
+ test_id + " AND Q_id = " + Q_id + ")", null);
cur.moveToFirst();
marksObt = Integer.parseInt(cur.getString(0));
cur.close();
} else {
marksObt = 0;
}
//done collecting all values, insert in db now
Log.e("database state", myDataBase.isOpen() + "");
openDB();
String sql = "Insert INTO testAnswerSubmitted (Test_id, Q_id, CorrectAnswer, SubmittedAnswer, MarksObtained) VALUES ( "
+ test_id
+ ", '"
+ Q_id
+ "', '"
+ correctAns
+ "', '"
+ submittedAns + "', '" + marksObt + "') ";
myDataBase.execSQL(sql);
Log.v("Executed", sql);
}
closeDB();
}
openDB ():
public void openDB() {
try {
createDataBase();
} catch (IOException e) {
//TODO Auto-generated catch block
Log.e("DataBaseHelper", e.toString());
}
openDataBase();
getWritableDatabase();
}
где createDatabase ():
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
//do nothing - database already exist
} else {
//By calling this method and empty database will be created into
//the default system path
//of your application so we are gonna be able to overwrite that
//database with our database.
//this.getReadableDatabase();//changed to write
this.getWritableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
closeDB ():
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}