Domanda

Spring Framework ha due classi simili: JdbcTemplate è la vecchia, la classe Java 1.4 e SimpleJdbcTemplate è la più recente, con metodi più belli.

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 : in base alla risposta di skaffman, creo l'oggetto SimpleJdbcTemplate da un JdbcTemplate , quindi ora posso fare quello che voglio. Codice:

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

Un po 'di bocca piena, ma ottiene il lavoro fatto.

Aggiorna : questo è davvero più complicato del necessario. Vedi la risposta.

È stato utile?

Soluzione

SimpleJdbcTemplat e non è un sostituto di JdbcTemplate , è solo un supplemento compatibile con java5, per alcune operazioni che possono trarre il massimo vantaggio da varargs e generici.

Se guardi l'origine di SimpleJdbcTemplate , vedrai che delega tutto il suo lavoro a un oggetto JdbcTemplate , e quindi impostando il timeout (o le altre opzioni) su JdbcTemplate , le imposti implicitamente anche su SimpleJdbcTemplate .

Se stai ottenendo il SimpleJdbcTemplate tramite SimpleJdbcDaoSupport.getSimpleJdbcTemplate () , il JdbcTemplate sarà già cablato correttamente.

modifica:

Ad esempio:

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

SimpleJdbcTemplate contiene lo stesso JdbcTemplate recuperato da getJdbcTemplate ().

Se non si estende SimpleJdbcDaoSupport, quindi sì, è necessario costruire manualmente un SimpleJdbcTemplate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top