Без причины ошибка The database file is locked (database is locked)

323
31 августа 2017, 18:16

В общем, создал бота для телеграма. Использую один, естественно, статический объект 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();
    }
READ ALSO
Как узнать размер результата запроса в JPA?

Как узнать размер результата запроса в JPA?

Что-то совсем запутался с этим JPA(( Есть запрос

230
IF между строками JAVA [дубликат]

IF между строками JAVA [дубликат]

На данный вопрос уже ответили:

221
Наложение скобок [дубликат]

Наложение скобок [дубликат]

На данный вопрос уже ответили:

383
Java JDBC > Не возвращается результат для SQL запросов с переменными типа TABLE

Java JDBC > Не возвращается результат для SQL запросов с переменными типа TABLE

Выполняю SQL запросы через JDBCЕсли запрос содержит переменную типа TABLE, то результат не возвращается:

393