首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java ResultSet、SetObject与SetString/SetDate等

Java ResultSet、SetObject与SetString/SetDate等
EN

Stack Overflow用户
提问于 2011-05-08 20:19:43
回答 2查看 6.2K关注 0票数 22

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-08 23:46:40

您可以这样做。

例如。

代码语言:javascript
复制
preparedStatement = connection.prepareStatement(SQL_INSERT);
SqlUtil.setValues(preparedStatement, user.getName(), user.getPassword(), user.getAge());

使用

代码语言:javascript
复制
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框架也在幕后使用它。

票数 13
EN

Stack Overflow用户

发布于 2011-05-08 23:40:37

ResultSet接口没有setObject(..)方法。它只有一个updateObject(..)方法。你是说PreparedStatement.setObject(..)吗?

在这种情况下,我认为这不是一个糟糕的做法,但甚至不是一个很好的解决方案。对我来说,我真的不理解“泛型DAO”的必要性。你能更详细地解释一下这个想法吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5927363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档