我想知道在准备语句时,是否有人认为对所有数据类型使用PreparedStatement.setObject
都是不好的做法。这方面的一个用例是具有泛型executeQuery()方法的DAO,该方法可以在所有查询中重用,而不必担心其数据类型。
发布于 2011-05-08 23:46:40
您可以这样做。
例如。
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驱动程序将执行类型检查。唯一的缺点可能是(次要的)开销,但与你最终得到的更好的可维护代码相比,这是微不足道的。而且,像Hibernate/JPA这样的大多数ORM框架也在幕后使用它。
发布于 2011-05-08 23:40:37
ResultSet
接口没有setObject(..)
方法。它只有一个updateObject(..)
方法。你是说PreparedStatement.setObject(..)
吗?
在这种情况下,我认为这不是一个糟糕的做法,但甚至不是一个很好的解决方案。对我来说,我真的不理解“泛型DAO”的必要性。你能更详细地解释一下这个想法吗?
https://stackoverflow.com/questions/5927363
复制相似问题