如何在 SimpleJdbcTemplate 上设置QueryTimeout?

发布于 2024-07-29 20:50:16 字数 910 浏览 11 评论 0原文

Spring 框架有两个类似的类:JdbcTemplate 是旧的 Java 1.4 类,SimpleJdbcTemplate 是较新的类,具有更好的方法。

JdbcTemplate 有一个方法 setQueryTimeout,它基本上使我能够访问底层 Statement 对象上具有相同名称的方法。

有没有办法用 SimpleJdbcTemplate

解决方案:根据skaffman的回答,我自己从JdbcTemplate创建了SimpleJdbcTemplate对象,所以现在我可以做任何我想做的事情。 代码:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);

有点拗口,但完成了工作。

更新:这确实比必要的更复杂。 查看答案。

The Spring Framework has two similar classes: JdbcTemplate is the old, Java 1.4 class, and SimpleJdbcTemplate is newer, with nicer methods.

JdbcTemplate has a method setQueryTimeout, which basically gives me access to a method with the same name on the underlying Statement object.

Is there any way to do something similar with a SimpleJdbcTemplate?

Solution: Based on skaffman's answer, I create the SimpleJdbcTemplate object myself from a JdbcTemplate, so now I can do whatever I want. Code:

JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);

A bit of a mouthful, but gets the job done.

Update: This is indeed more complicated than necessary. See the answer.

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

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

发布评论

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

评论(1

对你再特殊 2024-08-05 20:50:16

SimpleJdbcTemplate 并不是 JdbcTemplate 的替代品,它只是对它的一个 java5 友好的补充,用于某些可以充分利用可变参数和泛型的操作。

如果您查看 SimpleJdbcTemplate 的源代码,您会发现它将所有工作委托给 JdbcTemplate 对象,因此通过设置超时(或其他选项) )在 JdbcTemplate 上,您也可以在 SimpleJdbcTemplate 上隐式设置它们。

如果您通过 SimpleJdbcDaoSupport.getSimpleJdbcTemplate() 获取 SimpleJdbcTemplate,则 JdbcTemplate 已正确连接。

编辑:

例如:

public class MyDao extends SimpleJdbcDaoSupport {
    public void doStuff() {
        getJdbcTemplate().setQueryTimeout(x);
        getSimpleJdbcTemplate().execute(...);
    }
}

SimpleJdbcTemplate 包含与 getJdbcTemplate() 检索到的相同的 JdbcTemplate。

如果你不扩展SimpleJdbcDaoSupport,那么是的,你需要自己手动构造一个SimpleJdbcTemplate。

SimpleJdbcTemplate isn't a replacement for JdbcTemplate, it's just a java5-friendly supplement to it, for certain operations which can take best advantage of varargs and generics.

If you look at the source for SimpleJdbcTemplate, you'll see that it delegates all of its work to a JdbcTemplate object, and so by setting the timeout (or the other options) on JdbcTemplate, you implicitly set them on the SimpleJdbcTemplate also.

If you're obtaining the SimpleJdbcTemplate via SimpleJdbcDaoSupport.getSimpleJdbcTemplate(), then the JdbcTemplate will already have been wired up correctly.

edit:

For example:

public class MyDao extends SimpleJdbcDaoSupport {
    public void doStuff() {
        getJdbcTemplate().setQueryTimeout(x);
        getSimpleJdbcTemplate().execute(...);
    }
}

The SimpleJdbcTemplate contains the same JdbcTemplate as is retrieved by getJdbcTemplate().

If you don't extend SimpleJdbcDaoSupport, then yes, you need to manually construct a SimpleJdbcTemplate yourself.

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