Spring框架有两个类似的类:JdbcTemplate是旧的Java 1.4类,而SimpleJdbcTemplate是新的,具有更好的方法。
JdbcTemplate有一个方法setQueryTimeout,基本上可以让我访问基础Statement对象上具有相同名称的方法。
有什么办法可以用SimpleJdbcTemplate做类似的事情吗?
解决方案:基于skaffman的回答,我根据SimpleJdbcTemplate
自己创建了JdbcTemplate
对象,因此现在我可以做任何我想做的事情。代码:
JdbcTemplate jdbcTemplate = this.getJdbcTemplate();
jdbcTemplate.setQueryTimeout(30);
SimpleJdbcTemplate simpleJdbcTemplate = new SimpleJdbcTemplate(jdbcTemplate);
有点口,但可以完成工作。
更新:这确实比必要的复杂。查看答案。
最佳答案
SimpleJdbcTemplat
e不能替代JdbcTemplate
,它只是对java5的友好补充,对于某些可以充分利用varargs和泛型的操作。
如果查看SimpleJdbcTemplate
的源代码,您会看到它将所有工作委托(delegate)给JdbcTemplate
对象,因此通过在JdbcTemplate
上设置超时(或其他选项),您也可以在SimpleJdbcTemplate
上隐式设置它们。
如果您是通过SimpleJdbcTemplate
获取SimpleJdbcDaoSupport.getSimpleJdbcTemplate()
的,那么JdbcTemplate
将已经正确连接。
编辑:
例如:
public class MyDao extends SimpleJdbcDaoSupport {
public void doStuff() {
getJdbcTemplate().setQueryTimeout(x);
getSimpleJdbcTemplate().execute(...);
}
}
SimpleJdbcTemplate包含与getJdbcTemplate()检索的JdbcTemplate相同的JdbcTemplate。
如果您不扩展SimpleJdbcDaoSupport,则可以,您需要自己手动构造一个SimpleJdbcTemplate。
关于jdbc - 如何在SimpleJdbcTemplate上设置QueryTimeout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1206270/