Я хотел бы знать, рассматривает ли кто-либо использование PreparedStatement.setObject
для всех типов данных как плохую практику при подготовке оператора. Вариант использования для этого будет DAO с общим методом executeQuery(), который может быть повторно использован для всех запросов, не беспокоясь о его типах данных.
Java ResultSet, SetObject и SetString/SetDate/etc
Ответ 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". Не могли бы вы объяснить эту идею более подробно??