2009-07-30 11 views
5

The Spring Framework tiene dos clases similares: JdbcTemplate es la antigua clase Java 1.4 y SimpleJdbcTemplate es más reciente, con mejores métodos.¿Cómo configuro QQueryTimeout en SimpleJdbcTemplate?

JdbcTemplate tiene un método setQueryTimeout, que básicamente me da acceso a un método con el mismo nombre en el objeto Statement subyacente.

¿Hay alguna manera de hacer algo similar con un SimpleJdbcTemplate?

Solución: En base a la respuesta de skaffman, que crean la SimpleJdbcTemplate objeto mismo de una JdbcTemplate, así que ahora puedo hacer lo que quiera. Código:

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

Deguerre un poco, pero hace el trabajo bien.

Actualización: Esto es de hecho más complicado de lo necesario. Ver la respuesta.

+0

Proably más complejo de lo necesario, vea mi respuesta editada. – skaffman

+0

¿Cuál es la unidad para el tiempo de espera de la consulta? – akirekadu

+0

@akirekadu - segundos. – itsadok

Respuesta

4

SimpleJdbcTemplat e no es un reemplazo para JdbcTemplate, es solo un complemento compatible con java5, para ciertas operaciones que pueden aprovechar mejor los varargs y los genéricos.

Si nos fijamos en la fuente para SimpleJdbcTemplate, verá que delega todas las de su trabajo a un objeto JdbcTemplate, y así estableciendo el tiempo de espera (o las otras opciones) en JdbcTemplate, que implícitamente ponerlos en el SimpleJdbcTemplate también.

Si está obteniendo el SimpleJdbcTemplate a través de SimpleJdbcDaoSupport.getSimpleJdbcTemplate(), entonces el JdbcTemplate ya se habrá cableado correctamente.

edit:

Por ejemplo:

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

El SimpleJdbcTemplate contiene el mismo JdbcTemplate como se recupera por getJdbcTemplate().

Si no extiende SimpleJdbcDaoSupport, entonces sí, necesita construir manualmente una SimpleJdbcTemplate usted mismo.

+0

Pero, ¿cómo puedo acceder a JdbcTemplate que está "atrapado" dentro de SimpleJdbcTemplate? Todo lo que tengo es acceso a una interfaz JdbcOperations, que no tiene setTimeout. ¿Te importa mostrar un código? – itsadok

+0

No mencionó eso en su pregunta, usted estaba preguntando acerca de SimpleJdbcTemplate. Por favor, modifique su pregunta para aclarar lo que realmente quiere. – skaffman

+0

No, mi comentario no estaba claro. Quise decir que teniendo un objeto SimpleJdbcTemplate, todo lo que tengo es el método 'getJdbcOperations()'. No hay un método 'getUnderlyingJdbcTemplate()'. – itsadok

Cuestiones relacionadas