В общем, создал бота для телеграма. Использую один, естественно, статический объект Connection для доступа к БД. При необходимости использую метод connect() для соединения с БД и disconnect() для отсоединения. В общем в один момент происходит такая лажа, что соединение создано, select выборка проходит, а insert или update - нет. Выбивает исключение [SQLITE_BUSY] The database file is locked (database is locked). Помогите, пожалуйста разобраться, ибо уже третий день туплю и не могу врубиться!
public static void connect() {
try {
Class.forName("org.sqlite.JDBC");
String url = "jdbc:sqlite:db.db";
conn = DriverManager.getConnection(url);
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("connect");
}
public static void disconnect() {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
System.out.println("disconnect");
}
//Следующий метод выбивает на этапе commit:
void setState(Message message, state st, String column, String inColumn) {
connect();
Statement stmt;
try {
conn.setAutoCommit(false);
stmt = conn.createStatement();
String sql;
if (column == "") {
sql = String.format("INSERT OR IGNORE INTO T_USERS ('chatId', 'state') VALUES (%d, '%s');\nUPDATE T_USERS SET state = '%s' WHERE chatId LIKE %d;",
message.getChatId(), st.toString(), st.toString(), message.getChatId());
} else {
sql = String.format("INSERT OR IGNORE INTO T_USERS ('chatId', 'state', '%s') VALUES ('%d', '%s', '%s');\nUPDATE T_USERS SET 'state' = '%s', '%s' = '%s' WHERE chatId LIKE %d;",
column, message.getChatId(), st.toString(), inColumn, st.toString(), column, inColumn, message.getChatId());
}
stmt.execute(sql);
conn.commit();
stmt.close();
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
disconnect();
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Выполняю SQL запросы через JDBCЕсли запрос содержит переменную типа TABLE, то результат не возвращается: