Java ResultSet, SetObject vs SetString/SetDate/etc

2022-09-02 01:53:55

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


答案 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

该接口没有方法。它只有一个方法。您的意思是?ResultSetsetObject(..)updateObject(..)PreparedStatement.setObject(..)

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


推荐