Java ResultSet,SetObject与SetString / SetDate / etc
我想知道是否有人认为在准备语句时将PreparedStatement.setObject
用于所有数据类型是不好的做法。 一个用例就是一个带有通用executeQuery()方法的DAO,它可以重用于所有查询,而不必担心它的数据类型。
你可以这样做。
例如
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)也深入使用。
ResultSet
接口没有setObject(..)
方法。 它只有一个updateObject(..)
方法。 你的意思是PreparedStatement.setObject(..)
?
在这种情况下,我认为这不是一个坏习惯,但甚至不是一个好的解决方案。 至于我,我真的不明白“通用DAO”的必要性。 你能更详细地解释一下这个想法吗?