Java ResultSet、SetObject 与 SetString/SetDate/等

发布于 2024-11-05 10:14:15 字数 140 浏览 0 评论 0原文

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

I'd like to know whether anyone considers using PreparedStatement.setObject for all data types as bad practice when preparing a statement. A use case for this would be a DAO with a generic executeQuery() method which can be re-used for all queries without having to worry about its data types.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

给不了的爱 2024-11-12 10:14:15

你可以这样做。

例如

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)也在底层使用了这一点。

You can do so.

E.g.

preparedStatement = connection.prepareStatement(SQL_INSERT);
SqlUtil.setValues(preparedStatement, user.getName(), user.getPassword(), user.getAge());

with

public static void setValues(PreparedStatement preparedStatement, Object... values) throws SQLException {
    for (int i = 0; i < values.length; i++) {
        preparedStatement.setObject(i + 1, values[i]);
    }
}

The JDBC driver will do the type checking. The only disadvantage is maybe the (minor) overhead, but this is negligible as compared to the better maintainable code you end up with. Also, most ORM frameworks like Hibernate/JPA also uses that deep under the covers.

用心笑 2024-11-12 10:14:15

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

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

The ResultSet interface has no setObject(..) methods. It has only an updateObject(..) method. Did you mean PreparedStatement.setObject(..) ?

In this case I think this is not a bad practice, but not even a nice solution. As for me I don't really understand the need for the "generic DAO". Could you explain this idea in more details..?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文