Я создал java-программное обеспечение, использующее базу данных sqlite. Вся база данных работает плавно, однако после того, как некоторое время запуска приложения Я reveiving следующего сообщения (от попытки поймать блок):SQLITE_BUSY база данных заблокирована java
java.sql.SQLException: [SQLITE_BUSY] файл базы данных блокируются (база данных заблокировано)
Я решил свои проблемы, закрыв программное обеспечение каждый раз, когда возникло исключение. Однако есть ли способ закрыть мою базу данных, чтобы не закрывать программное обеспечение каждый раз?
Я ве получило много запросов, однако мои Пробы всегда возникают в определенной точке:
try {
String query = "select * from StudentsSession where userId=? and course=? and level=?";
PreparedStatement pst = connectionUsers.prepareStatement(query);
pst.setString(1, saveUser.getText());
pst.setString(2, textSubjectQTest);
st.setString(3, showCurrentLevelLabel.getText());
ResultSet rs = pst.executeQuery();
while (rs.next()) {
count = count + 1;
}
pst.close();
rs.close();
} catch (Exception a) {
System.out.println(a);
}
try {
String countS, tmpS;
countS = String.valueOf(count);
sessionId.setText(countS);
long unixTime = System.currentTimeMillis()/1000L;
tmpS = String.valueOf(unixTime);
date.setText(tmpS);
course.setText(textSubjectQTest);
String query = "insert into StudentsSession (userId,date,course,level,trial,score) values (?,?,?,?,?,-1)";
PreparedStatement pst = connectionUsers.prepareStatement(query);
pst.setString(1, saveUser.getText());
pst.setString(2, tmpS);
pst.setString(3, textSubjectQTest);
pst.setString(4, showCurrentLevelLabel.getText());
pst.setString(5, countS);
pst.executeUpdate();
pst.close();
} catch (Exception a) {
System.out.println(a);
System.exit(0);
}
String file1 = "";
ResultSet ts4;
try {
sessionId3 = "";
String query3 = "select * from studentssession where userid = ? and course = ? and level = ?";
PreparedStatement pst__1 = connectionUsers.prepareStatement(query3);
pst__1.setString(1, saveUser.getText());
pst__1.setString(2, textSubjectQTest);
pst__1.setString(3, showCurrentLevelLabel.getText());
ts4 = pst__1.executeQuery();
while (ts4.next()) {
sessionId3 = ts4.getString("sessionId");
}
pst__1.close();
ts4.close();
obj = new CaptureVideoFromWebCamera();
file1 = "videos/" + userTextFieldS.getText();
file1 = file1 + "_" + sessionId3;
file1 = file1 + ".wmv";
obj.start(file1);
} catch (Exception e4) {
e4.getCause();
}
Иногда этот код подняться исключением.
SQlite полезен для небольших локальных приложений, в этом случае Singleton достаточно, чтобы предотвратить блокировку. Если в приложении есть несколько потоков, это решит ваши проблемы. Я бы сказал, что вы забыли закрыть где-то соединение. Я использовал его в старом приложении, не имея подобных проблем. – AxelH
Кажется, что эта ошибка возникает, когда я пытаюсь получить доступ к определенной таблице. Так моя проблема в том, что у меня есть запрос запроса, который я никогда не закрывал где-то? –
Моя проблема возникает в конкретном вопросе каждый раз, я не знаю, почему! –