Java попробовать с ресурсами: пустой набор результатов - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь обновить пользователя в моей базе данных с помощью инструкции java try-with-resources.Однако я получаю сообщение об ошибке, что мой набор результатов пуст.Прочитав различные другие посты, они предлагают использовать ps.executeUpdate () вместо ps.executeQuery (), но это возвращает int, у которого (явно очевидное) нет типа «Auto closable», что означает, что код делаетдаже не передать компиляцию.

У кого-нибудь есть пример, как это обойти?

public void updateUser (String id, String value){

    try (Connection con = DriverManager.getConnection("jdbc:databasetype://localhost:5432/database");
         PreparedStatement ps = createUpdateStatement(con, id, value);
         ResultSet rs = ps.executeQuery())
    {
        System.out.println("Add operation completed");
    } catch(Exception e) {
        System.out.println("Exception: " + e.getMessage() + " Thrown by: " + e.getClass().getSimpleName());
    }
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Ресурсы внутри попытки нужны только в том случае, если они реализуют Closeable.Как вы сказали, примитивное целое число не может переместить его из попытки с ресурсами в тело:

public void updateUser (String id, String value)
{
    try (Connection con = DriverManager.getConnection("jdbc:databasetype://localhost:5432/database");
         PreparedStatement ps = createUpdateStatement(con, id, value))
    {
        int result = ps.executeUpdate();
        System.out.println("Add operation completed");
    } catch(Exception e) {
        System.out.println("Exception: " + e.getMessage() + " Thrown by: " + e.getClass().getSimpleName());
    }
}
0 голосов
/ 21 мая 2018

Переместите ps.executeUpdate в тело try:

try (Connection con = DriverManager.getConnection("jdbc:databasetype://localhost:5432/database");
     PreparedStatement ps = createUpdateStatement(con, id, value)) {
    ps.executeUpdate();        
    System.out.println("Add operation completed");
} catch(Exception e) {
    System.out.println("Exception: " + e.getMessage() + " Thrown by: " + e.getClass().getSimpleName());
}
...