私はsqliteデータベースを利用するJavaソフトウェアを作成しています。データベース全体がスムーズに動作しますが、アプリケーションを実行してからしばらくお待ちください。SQLITE_BUSYデータベースがロックされています
java.sql.SQLException:[SQLITE_BUSY]データベースファイルがロックされています(データベースはロックされています)。ロックされた)
私は、例外が発生するたびにソフトウェアを閉じることで問題を解決しました。しかし、毎回ソフトウェアを閉じないようにデータベースを閉じる方法がありますか?
私は私のPROBは、特定の時点で常に発生するが、クエリの多くを得たVEの:
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は小規模なローカルアプリケーションに役立ちます。その場合、シングルトンはロックを防止するのに十分です。あなたのアプリケーションに複数のスレッドがある場合、それが問題を解決します。あなたはどこかで接続を閉じるのを忘れたと言います。私はこの種の問題を起こさずに古いアプリで使っていました。 – AxelH
特定のテーブルにアクセスしようとするとこのエラーが発生するようです。だから私の問題は、私はどこかでそれを閉じたことがないクエリステートメントがあるということです? –
私の問題は毎回特定のクエリで発生し、私はなぜそれがわからないのですか? –