如何在Spring JDBC中获取当前的Connection对象

vlc*_*cik 30 java oracle spring jdbc

如何获取Oracle数据库的当前Connection对象?我在Spring 3.0.5中使用JDBC模块.

soc*_*a23 27

ConnectionDataSource豆中获取.

您可以通过使用Spring依赖注入将其注入到bean中,或者通过ApplicationContext静态访问来访问dataSource :

DataSource ds = (DataSource)ApplicationContextProvider.getApplicationContext().getBean("dataSource");
Connection c = ds.getConnection();
Run Code Online (Sandbox Code Playgroud)

  • 但它不会返回当前连接而是新连接.我需要返回当前连接.情况是:我创建了连接,我需要它在另一个地方使用但是在相同的连接中 (11认同)
  • 每次运行其中一个方法时,JDBCTemplate在内部使用`DataSourceUtils.getConnection()`.它没有保留对上次使用的连接的引用,所以我认为没有办法获得它. (2认同)

axt*_*avt 17

使用DataSourceUtils.getConnection().

它返回与当前事务关联的连接(如果有).

  • @ user330847:如果您不需要共享与该连接关联的事务,为什么需要相同的连接? (2认同)
  • 该方法在Spring 5中不存在。 (2认同)

小智 17

只是一个信息:我正在使用Spring JDBC Template,它为我保存当前的连接对象,可以按如下方式接收.

Connection con;
con = getJdbcTemplate().getDataSource().getConnection();
Run Code Online (Sandbox Code Playgroud)

  • 对于那些可能不知道的人,可以轻松地将JdbcTemplate作为字段注入:@Autowired JdbcTemplate jdbcTemplate; (2认同)

aar*_*bor 7

我不确定这个问题最初发布时是否可用,但是,在最新版本的 Spring 中执行此操作的首选方法似乎是使用JdbcTemplatePreparedStatementCreator。请参阅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-或任何其他query以 aPreparedStatementCreator作为第一个参数的方法:

jdbcTemplate.query(con -> {
  // add required logic here
  return con.prepareStatement("sql");
 }, rs -> {
       //process row
});
Run Code Online (Sandbox Code Playgroud)

这比其他提供的答案有优势(DataSourceUtils.getConnection()或者由于jdbcTemplate.getDataSource().getConnection()分配新连接,它使用与调用任何其他查询方法相同的连接管理。因此,您也无需担心关闭/释放连接,因为 spring 会处理它。jdbcTemplate