Comment puis-je obtenir l'objet Connection actuel pour une base de données Oracle? J'utilise le module JDBC dans Spring 3.0.5.
Obtenez le Connection
à partir du bean DataSource
.
Vous pouvez accéder à la source de données en utilisant l'injection de dépendance Spring pour l'injecter dans votre bean, ou en accédant à ApplicationContext
de façon statique:
DataSource ds = (DataSource)ApplicationContextProvider.getApplicationContext().getBean("dataSource");
Connection c = ds.getConnection();
Juste une info: j'utilise le modèle Spring JDBC, qui contient pour moi l'objet de connexion actuel, qui peut être reçu comme suit.
Connection con;
con = getJdbcTemplate().getDataSource().getConnection();
Utilisez DataSourceUtils.getConnection()
.
Il renvoie la connexion associée à la transaction en cours, le cas échéant.
Je ne sais pas si cette méthode était disponible lorsque cette question a été publiée à l'origine, cependant, il semble que la façon préférée de le faire dans la dernière version de Spring soit avec JdbcTemplate
et PreparedStatementCreator
. Voir https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html#query-org.springframework.jdbc.core.PreparedStatementCreator-org .springframework.jdbc.core.PreparedStatementSetter-org.springframework.jdbc.core.ResultSetExtractor - ou l'une des autres méthodes query
qui prennent PreparedStatementCreator
comme premier paramètre:
jdbcTemplate.query(con -> {
// add required logic here
return con.prepareStatement("sql");
}, rs -> {
//process row
});
Cela a l'avantage sur les autres réponses fournies (DataSourceUtils.getConnection()
ou jdbcTemplate.getDataSource().getConnection()
car une nouvelle connexion n'est pas allouée , il utilise la même gestion de connexion que s'il appelait n'importe quelle autre méthode d'interrogation jdbcTemplate
. Par conséquent, vous n'avez pas à vous soucier de la fermeture/libération de la connexion, car Spring s'en chargera.