Ich habe eine Java-Software, die sqlite Datenbank verwenden. Die gesamte Datenbank reibungslos funktioniert jedoch nach einiger Zeit von der Ausführung der Anwendung mir die folgende Meldung am reveiving (von einem Try-Catch-Block):SQLITE_BUSY die Datenbank ist gesperrt java
java.sql.SQLException: [SQLITE_BUSY] Die Datenbankdatei gesperrt ist (Datenbank gesperrt)
Ich habe meine Probleme gelöst, indem ich die Software bei jeder Erhöhung der Ausnahme geschlossen habe. Gibt es jedoch eine Möglichkeit, meine Datenbank zu schließen, um die Software nicht jedes Mal zu schließen?
Ich habe habe viele Anfragen aber mein prob immer in einem bestimmten Punkt entsteht:
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();
}
Manchmal die Ausnahme dieser Code steigen.
SQlite ist nützlich für kleine lokale Anwendung, in diesem Fall ist ein Singleton genug, um eine Sperre zu verhindern. Wenn Sie mehrere Threads in Ihrer Anwendung haben, werden Ihre Probleme dadurch gelöst. Ich würde sagen, dass du vergessen hast, deine Verbindung irgendwo zu schließen. Ich habe es in einer alten App verwendet, ohne diese Art von Problemen zu haben. – AxelH
Es scheint, dass dieser Fehler auftritt, wenn ich versuche, Zugriff auf eine bestimmte Tabelle zu haben. Also mein Problem ist, dass ich eine Abfrage habe, dass ich es nie irgendwo geschlossen habe? –
Mein Problem entsteht jedes Mal in einer bestimmten Abfrage, ich bin mir nicht sicher warum! –