Как я могу получить текущий объект Connection для базы данных Oracle? Я использую модуль JDBC в Spring 3.0.5.
Как получить текущий объект Connection в Spring JDBC
Ответ 1
Получите Connection
из DataSource
bean.
Вы можете получить доступ к источнику данных с помощью инъекции зависимостей Spring, чтобы ввести его в свой bean или путем доступа к ApplicationContext
статически:
DataSource ds = (DataSource)ApplicationContextProvider.getApplicationContext().getBean("dataSource");
Connection c = ds.getConnection();
Ответ 2
Используйте DataSourceUtils.getConnection()
.
Он возвращает соединение, связанное с текущей транзакцией, если оно есть.
Ответ 3
Просто информация: Я использую шаблон Spring JDBC, который содержит текущий объект связи для меня, который можно получить следующим образом.
Connection con;
con = getJdbcTemplate().getDataSource().getConnection();
Ответ 4
Я не уверен, был ли этот метод доступен, когда этот вопрос был первоначально опубликован, однако, кажется, что предпочтительный способ сделать это в последней версии Spring - это JdbcTemplate
и PreparedStatementCreator
. См. Https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html#query-org.springframework.jdbc.core.PreparedStatementCreatorrameworkjj.core.PreparedStatementSetter-org.springframework.jdbc.core. ResultSetExtractor- или любой из других методов query
которые принимают PreparedStatementCreator
в качестве первого параметра:
jdbcTemplate.query(con -> {
// add required logic here
return con.prepareStatement("sql");
}, rs -> {
//process row
});
Это имеет преимущество перед другими предоставленными ответами (DataSourceUtils.getConnection()
или jdbcTemplate.getDataSource().getConnection()
как новое соединение не выделяется, оно использует то же управление соединением, что и при вызове любого из других jdbcTemplate
запроса jdbcTemplate
Поэтому вам также не нужно беспокоиться о закрытии/отпускании соединения, поскольку пружина справится с этим.