Подтвердить что ты не робот

Java ResultSet, SetObject и SetString/SetDate/etc

Я хотел бы знать, рассматривает ли кто-либо использование PreparedStatement.setObject для всех типов данных как плохую практику при подготовке оператора. Вариант использования для этого будет DAO с общим методом executeQuery(), который может быть повторно использован для всех запросов, не беспокоясь о его типах данных.

4b9b3361

Ответ 1

Вы можете сделать это.

например.

preparedStatement = connection.prepareStatement(SQL_INSERT);
SqlUtil.setValues(preparedStatement, user.getName(), user.getPassword(), user.getAge());

с

public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException {
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
}

Драйвер JDBC выполнит проверку типа. Единственным недостатком может быть (незначительная) накладная работа, но это незначительно по сравнению с лучшим поддерживаемым кодом, в котором вы закончили. Кроме того, большинство инфраструктур ORM, таких как Hibernate/JPA, также используют это глубоко под обложками.

Ответ 2

Интерфейс ResultSet не имеет методов setObject(..). Он имеет только метод updateObject(..). Вы имели в виду PreparedStatement.setObject(..)?

В этом случае я считаю, что это не плохая практика, но даже не хорошее решение. Что касается меня, я не совсем понимаю необходимость "общего DAO". Не могли бы вы объяснить эту идею более подробно??