Возможно ли, что org.springframework.jdb c .core.JdbcOperations.query (PreparedStatementCreator, ResultSetExtractor) возвращает закрытый RowSet? - PullRequest
0 голосов
/ 12 февраля 2020

Я выбираю из базы данных и хочу убедиться, что мне нужно проверить, пусто ли RowSet. Нужно ли мне делать простое if заявление или я могу его оставить?

Так достаточно ли этого?

    //RowSet rs = (...)
    try {
        rs.next()
        //process data
    } catch (SQLException e) {

    }

Или мне нужно добавить в него выражение if, как это :

    //RowSet rs = (...)
    try {
        if (rs.next()) {
            //process data
        }
    } catch (SQLException e) {

    }

Выдает ли rs.next() SQLException даже если RowSet пусто или только когда оно закрыто? Другой способ задать вопрос: закрыт ли RowSet, когда он пуст?

1 Ответ

2 голосов
/ 12 февраля 2020

Хотя это не отвечает на ваш вопрос ... Я бы спросил, почему вы не используете встроенные функции преобразования / отображения JdbcTemplate. Spring абстрагирует большинство операций ResultSet для открытия, итерации и закрытия, чтобы вы могли просто сосредоточиться на отображении данных в объекты. Вы можете использовать реализацию RowMapper, которая дает вам метод mapRow(ResultSet rs, int rowNum), и вы можете сопоставить каждую строку с объектом. Если строки не возвращаются, отображение никогда не выполняется. Результат каждого сопоставления попадает в список, поэтому, если строк нет, ваш список будет пустым.

List<MyType> rowsFromDatabaseMapped = jdbcTemplate.query(SQL_STR, new Object[]{any_params}, new MyTypeMapper());
...