【问题标题】:How do I setQueryTimeout on SimpleJdbcTemplate?如何在 SimpleJdbcTemplate 上设置QueryTimeout?
【发布时间】:2009-07-30 12:24:52
【问题描述】:

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);

有点拗口,但可以完成工作。

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

【问题讨论】:

  • 可能比必要的更复杂,请参阅我编辑的答案。
  • 查询超时的单位是多少?

标签: jdbc spring jdbctemplate


【解决方案1】:

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 中的 JdbcTemplate?我所拥有的只是访问没有 setTimeout 的 JdbcOperations 接口。想展示一些代码吗?
  • 你没有在你的问题中提到,你问的是 SimpleJdbcTemplate。请修改您的问题以澄清您真正想要的内容。
  • 不,我的评论不清楚。我的意思是拥有一个 SimpleJdbcTemplate 对象,我所拥有的只是 getJdbcOperations() 方法。没有getUnderlyingJdbcTemplate() 方法。
猜你喜欢
  • 2012-08-18
  • 2020-01-20
  • 2012-10-20
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多