executeUpdate заблокировано - PullRequest
       16

executeUpdate заблокировано

0 голосов
/ 25 октября 2019

Когда код доходит до шага "pstmt.executeUpdate ()", он зависает и блокируется, и я не получаю никаких исключений SQL

Это работает:

SQL = "INSERT INTO Procedure (file_path,id) VALUES ('/test/file_test.pdf',512);";
pstmt = con.prepareStatement(SQL,Statement.RETURN_GENERATED_KEYS);
pstmt.executeUpdate();

Этоне работает! и я не получаю никаких исключений, и оно блокируется:

SQL = "INSERT INTO Procedure (file_path,id) VALUES (?,?);";
pstmt = con.prepareStatement(SQL,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(1, "/test/file_test.pdf");
pstmt.setInt(2, 512);
pstmt.executeUpdate();

Я не понимаю, почему мой код блокируется, когда я использую следующее решение (я имею в виду setString и setInt).

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

Использование Try / Catch и отладчика даст вам больше информации о проблеме. У меня была похожая проблема в прошлом, и вот как я ее решил. Я не уверен, в чем проблема, но попробуйте это

public void getCar(String carName) {
String[] key = {"PRIMARY_KEY_COLUMN"};
try(Connection con = super.getConnection()) {
    String queryOne = "INSERT INTO Procedure (file_path,id) VALUES (?,?)";;
    try(PreparedStatement pstmt = con.prepareStatement(queryOne, key)){
        pstmt.setString(1, "/test/file_test.pdf");
        pstmt.setInt(2, 512);
        pstmt.executeUpdate();
        int generatedKey = getGeneratedKey(pstmt));
        pstmt.close();
    } catch (SQLException e) {
        e.printStackTrace();
        // Do somthing if connection is set but exception thrown
    }
} catch (SQLException e) {
    e.printStackTrace();
    // Do somthing else if connection couldn't be set
}
}

private int getGeneratedKey(PreparedStatement pstmt) throws SQLException {
    int generatedKey = 0;
    ResultSet rs = pstmt.getGeneratedKeys();
    if (rs.next()) {
        generatedKey = rs.getInt(1);
    }
    rs.close();
    return generatedKey;
}
0 голосов
/ 25 октября 2019

привет, ребята, ошибка найдена и исправлена ​​

Причина ошибки: например, допустим, у нас есть 2 таблицы B [Id, othercolumn] и A [Id, pathfile, fk_id_B] Я запустил стартовую транзакцию (ОБНОВЛЕНИЕ записей id = 512) в таблице B, но я забываю закрыть транзакцию (connection.commit (); connection.close ()) до того, как я посмотрел другой запуск транзакции на A, поэтому вызывает это замораживание, потому что запись (id = 512) до сих пор используется транзакцией предварительного просмотра

0 голосов
/ 25 октября 2019

procedure - зарезервированное ключевое слово в SQL. Может быть, это связано с этим. Измените имя таблицы процедур на другое и попробуйте.

Вы также можете попробовать изменить процедуру в «Процедура».

Я надеюсь, что это работает для вас.

...