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/

10-16 23:04