Подтвердить что ты не робот

Как получить текущий объект Connection в Spring JDBC

Как я могу получить текущий объект Connection для базы данных Oracle? Я использую модуль JDBC в Spring 3.0.5.

4b9b3361

Ответ 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 Поэтому вам также не нужно беспокоиться о закрытии/отпускании соединения, поскольку пружина справится с этим.