在Spring的JdbcTemplate中对数据库的操作进行了封装,具体的执行代码放在了这个类的execute()方法中。
首先,在JdbcTemplate.java中,对execute()方法进行了重载,有着好几个execute方法。
在下面这段代码中,我觉得值得学习的一个地方就是他的catch()部分。
一般的,只要在finally块中加入了数据库以及statement关闭代码即可,但是在这里,作者在catch块中也加入了数据库关闭代码,其理由就是,防止潜在的数据库连接池死锁。
之前做的项目,用数据库连接池发现无法释放连接,会不会就是这个原因呢? Maybe~
PS:这部分注释是源代码中自带的。
另外,从关闭Statement与Connection的方法名字就可以看出,他们的关闭原理其实是不一样的。Statement确实是关闭,而Connection是返回到数据库连接池之中。
//-------------------------------------------------------------------------
// Methods dealing with static SQL (java.sql.Statement)
//-------------------------------------------------------------------------
public Object execute(StatementCallback action) throws DataAccessException {
Assert.notNull(action, "Callback object must not be null");
Connection con = DataSourceUtils.getConnection(getDataSource());
Statement stmt = null;
try {
Connection conToUse = con;
if (this.nativeJdbcExtractor != null &&
this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {
conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
}
stmt = conToUse.createStatement();
applyStatementSettings(stmt);
Statement stmtToUse = stmt;
if (this.nativeJdbcExtractor != null) {
stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);
}
Object result = action.doInStatement(stmtToUse);
handleWarnings(stmt);
return result;
}
catch (SQLException ex) {
// Release Connection early, to avoid potential connection pool deadlock
// in the case when the exception translator hasn't been initialized yet.
JdbcUtils.closeStatement(stmt);
stmt = null;
DataSourceUtils.releaseConnection(con, getDataSource());
con = null;
throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex);
}
finally {
JdbcUtils.closeStatement(stmt);
DataSourceUtils.releaseConnection(con, getDataSource());
}
}
分享到:
相关推荐
在Spring框架中,数据库动态切换是一项关键功能,它允许应用程序根据特定条件或需求在多个数据库之间灵活地切换。这在处理分布式系统、多租户应用或者数据隔离等场景时非常有用。下面我们将深入探讨这个主题。 首先...
本示例主要关注Spring Boot与JPA(Java Persistence API)的集成,用于数据库操作。JPA是Java EE平台的一部分,提供了一种标准的方式来管理和持久化应用程序中的对象到关系数据库。 首先,让我们详细了解一下Spring...
而NHibernate则是一个流行的ORM(对象关系映射)框架,它允许开发者用面向对象的方式处理数据库操作,从而减少了对SQL的直接依赖。 本文将深入探讨如何使用Spring.Net与NHibernate结合进行多数据库操作,以便在不同...
本文将详细讲解如何使用 Spring 连接数据库,包括创建数据库、配置 Spring、编写数据库操作代码等步骤。 创建数据库 首先,我们需要创建一个数据库。这里,我们使用 MySQL 数据库管理系统和 SQLyog 工具来创建一个...
接下来,我们讨论Spring如何进行数据库操作。Spring JDBC模块提供了模板类`JdbcTemplate`和`NamedParameterJdbcTemplate`,它们简化了编写SQL语句和处理结果集的过程。例如,使用`JdbcTemplate`执行一个简单的查询:...
2. **模板模式**:Spring JDBC提供了`JdbcTemplate`类,这是一个用于执行数据库操作的模板类。它简化了错误处理和资源释放的代码,使得开发者能够更加专注于业务逻辑的实现。 3. **自动注入与便利获取**:Spring还...
这篇博客"Spring-test做数据库操作的单元测试2-跨库访问"探讨了如何利用Spring-test进行数据库操作的测试,尤其是涉及到跨库访问的场景。在企业级应用开发中,常常需要处理多个数据库的情况,例如主从数据库、读写...
SpringCloud作为一个微服务框架,提供了丰富的服务治理功能,而数据库作为数据存储的核心,与SpringBoot的集成使得我们可以轻松处理数据操作。本篇文章将详细讲解如何在SpringCloud项目中配置Oracle数据库,并从...
总结,Spring数据库访问中的ORM技术是企业级应用开发的重要组成部分。通过Spring对JPA、Hibernate、MyBatis等ORM框架的集成,我们可以轻松地在Java应用中进行数据库操作。同时,Spring提供的事务管理和数据源连接池...
在IT行业中,数据库操作是应用程序的核心部分,Spring JPA(Java Persistence API)是Spring框架提供的一种简化ORM(对象关系映射)操作的方式。本主题主要围绕"spring jpa操作数据库 级联数据 hibernate"展开,探讨...
在Spring框架中,多数据库的支持是一项重要的功能,它允许开发者在一个应用中同时连接并操作多个数据库。这在处理跨系统数据交互、数据隔离或者不同数据源的场景下非常有用。"spring多数据库"项目就是针对这种需求而...
本篇文章将深入探讨三个流行的Java框架:Spring、Hibernate和iBatis,它们都提供了对数据库操作的高效封装,使得开发人员能够更便捷地处理数据库事务。 首先,Spring框架以其强大的依赖注入和面向切面编程闻名,它...
综上所述,这个压缩包提供了一个完整的Spring与MySQL结合的示例,涵盖了Spring的数据库操作、MVC模式、事务管理等多个核心功能,是学习和理解Spring整合数据库的绝佳实践。通过这个项目,开发者可以深入理解Spring...
可以通过Spring Security来控制用户的数据库访问权限,防止未经授权的数据库操作。 9. **测试与监控**:在开发和运行阶段,对多数据源的测试和监控同样重要。使用像Spring Boot Actuator这样的工具,可以实时监控...
然后,为了使Spring管理数据库操作,我们可以创建一个JdbcTemplate或NamedParameterJdbcTemplate的bean,如下所示: ```xml <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> ``` ...
本教程将深入探讨Spring Data JPA如何进行数据库操作,并结合DAO层(数据访问对象)的使用,帮助开发者更高效地进行数据管理。 首先,我们需要理解JPA(Java Persistence API)的概念。JPA是Java标准,定义了一种...
Spring Batch 是一个强大的、可扩展的Java框架,专门用于处理批量数据处理任务,包括大量数据库数据的读取、处理和写入。它被设计为在企业级应用中处理大规模、高吞吐量的工作负载。本篇文章将深入探讨如何利用...
本篇文章将深入探讨Spring中的数据库异常处理机制,帮助开发者更好地理解和处理在数据库操作中可能遇到的问题。 首先,Spring Data Access层的核心组件是JdbcTemplate和HibernateTemplate(或其升级版JPA的...
"dwr与spring数据库环境集成"是一个常见的技术实践,它涉及到Direct Web Remoting (DWR)框架、Spring框架以及数据库(如MySQL)的整合。在这个场景中,DWR用于实现浏览器与服务器之间的异步通信,Spring作为一款强大...
Spring Boot以其自动配置和简化开发流程的特点,极大地简化了数据库操作。在这个主题中,我们将深入探讨Spring Boot如何与MySQL数据库进行集成,以及如何进行CRUD(创建、读取、更新和删除)操作。 首先,集成MySQL...