如何在 SimpleJdbcTemplate 上设置QueryTimeout?
Posted
技术标签:
【中文标题】如何在 SimpleJdbcTemplate 上设置QueryTimeout?【英文标题】:How do I setQueryTimeout on SimpleJdbcTemplate? 【发布时间】: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);
有点拗口,但可以完成工作。
更新:这确实比必要的复杂。查看答案。
【问题讨论】:
可能比必要的更复杂,请参阅我编辑的答案。 查询超时的单位是多少? 【参考方案1】:SimpleJdbcTemplat
e 不是 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()
方法。以上是关于如何在 SimpleJdbcTemplate 上设置QueryTimeout?的主要内容,如果未能解决你的问题,请参考以下文章