Java ResultSet,SetObject与SetString / SetDate / etc

时间:2011-05-08 12:19:43

标签: java jdbc resultset

我想知道在准备语句时是否有人认为将PreparedStatement.setObject用于所有数据类型是不好的做法。一个用例就是一个带有通用executeQuery()方法的DAO,它可以重用于所有查询,而不必担心它的数据类型。

2 个答案:

答案 0 :(得分:11)

你可以这样做。

E.g。

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)也使用了深层次的内容。

答案 1 :(得分:1)

ResultSet接口没有setObject(..)方法。它只有updateObject(..)方法。您的意思是PreparedStatement.setObject(..)吗?

在这种情况下,我认为这不是一个坏习惯,但甚至不是一个好的解决方案。至于我,我并不真正理解“通用DAO”的必要性。你能更详细地解释这个想法吗??