Witam, problem jest tego typu:
Coś dzisiaj popieprzyłem w programie (i właśnie cholera nie wiem co), że po wywołaniu metody, która zapisuje do bazy (albo robi operacje inne niż odczyt ) nie rozłącza połączenia i wywołanie po niej jakiejkolwiek innej metody, która operuje na db powoduje jej zablokowanie.
Wiem, że SQLite dopuszcza maksymalnie jedno połączenie zapisujące, ale jeszcze do wczoraj nic się nie zawieszało, nie blokowało, a nie dodawałem żadnej metody, która operuje na bd.
Kod klasy DBHelper.java
public class DBHelper {
Connection connection = null;
public Connection connectToDatabase() throws ClassNotFoundException {
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:D:\\Testdb1.sqlite");
return connection;
}
catch(SQLException e){
System.err.println("Problem with connection: " + e);
return null;
}
}
}
Kod przykładowej metody zapisującej do db
public void addNewCategory(Category category) throws ClassNotFoundException {
try {
Connection connection = dbh.connectToDatabase();
Statement statement = connection.createStatement();
statement.executeQuery("INSERT INTO category(name) VALUES('" + category.getName() + "');");
}catch(SQLException e) {
System.err.print("Problem with adding a new category" + e);
}
}
Kod przykładowej metody czytającej z db
public ObservableList<Category> getCategoryList() throws ClassNotFoundException, SQLException {
ResultSet rs = null;
try {
Connection connection = dbh.connectToDatabase();
Statement statement = connection.createStatement();
rs = statement.executeQuery("SELECT * FROM category;");
}catch(SQLException e) {
System.err.print("Problem with getting list of a category" + e);
}
ObservableList<Category> list = FXCollections.observableArrayList();
while(rs.next()) {
Category c = new Category();
c.setName(rs.getString("name"));
c.setId(rs.getInt("id"));
list.add(c);
}
return list;
}
Ma ktoś jakiś pomysł odnośnie przyczyny?
Pozdrawiam