2009-07-30 3 views
5

La Spring Framework ha due classi simili: JdbcTemplate è il vecchio, Java 1.4 di classe, e SimpleJdbcTemplate è più recente, con i metodi più belli.Come faccio a impostareQueryTimeout su SimpleJdbcTemplate?

JdbcTemplate ha un metodo setQueryTimeout, che in pratica mi dà accesso a un metodo con lo stesso nome sull'oggetto Statement sottostante.

Esiste un modo per fare qualcosa di simile con un SimpleJdbcTemplate?

Soluzione: Sulla base di risposta di skaffman, creo il SimpleJdbcTemplate oggetto me stesso da un JdbcTemplate, così ora posso fare quello che voglio. Codice:

Un po 'di boccone, ma ha il compito.

Aggiornamento: Questo è davvero più complicato del necessario. Guarda la risposta.

+0

proably più complessa di quanto necessario, vedere la mia risposta modificato. – skaffman

+0

Qual è l'unità per il timeout della query? – akirekadu

+0

@akirekadu - secondi. – itsadok

risposta

4

SimpleJdbcTemplat e non è un sostituto per JdbcTemplate, è solo un integratore java5-friendly ad esso per alcune operazioni che possono sfruttare al meglio varargs e generici.

Se si guarda alla fonte per SimpleJdbcTemplate, vedrai che delega tutti i suoi lavori a un oggetto JdbcTemplate, e quindi impostando il timeout (o le altre opzioni) su JdbcTemplate, è implicitamente li imposta sul SimpleJdbcTemplate anche.

Se si sta ottenendo il SimpleJdbcTemplate tramite SimpleJdbcDaoSupport.getSimpleJdbcTemplate(), lo JdbcTemplate sarà già stato cablato correttamente.

modifica:

Ad esempio:

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

Il SimpleJdbcTemplate contiene la stessa JdbcTemplate come è recuperato getJdbcTemplate().

Se non estendere SimpleJdbcDaoSupport, allora sì, è necessario costruire manualmente un SimpleJdbcTemplate te stesso.

+0

Ma come faccio ad accedere alla JdbcTemplate questo è "intrappolato" all'interno del SimpleJdbcTemplate? Tutto quello che ho è l'accesso a un'interfaccia JdbcOperations, che non ha setTimeout. Ti interessa mostrare un codice? – itsadok

+0

Lei non ha menzionato che nella sua interrogazione, si stava chiedendo su SimpleJdbcTemplate. Per favore modifica la tua domanda per chiarire cosa vuoi realmente. – skaffman

+0

No, il mio commento non è chiaro. Intendevo dire che avendo un oggetto SimpleJdbcTemplate, tutto quello che ho è il metodo 'getJdbcOperations()'. Non esiste un metodo 'getUnderlyingJdbcTemplate()'. – itsadok