一、在JDBC连接中开启事务,调用完成后关闭连接(传统方式不推荐使用)
private static DataSource ds;
static{
try{
Properties prop = new Properties();
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
prop.load(in);
BasicDataSourceFactory factory = new BasicDataSourceFactory();
ds = factory.createDataSource(prop);
}catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public void transfer() throws SQLException{
Connection conn = null;
try{
conn = JdbcUtils.getConnection();
conn.setAutoCommit(false);
//对数据进行操作
conn.commit();
}finally{
if(conn!=null) conn.close();
}
}
二、用ThreadLocal类在线程上绑定一个连接
private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();
在获得连接的时候就绑定到threadLocal 上
public static Connection getConnection() throws SQLException{
try{
//得到当前线程上绑定的连接
Connection conn = threadLocal.get();
if(conn==null){ //代表线程上没有绑定连接
conn = ds.getConnection();
threadLocal.set(conn);
}
return conn;
}catch (Exception e) {
throw new RuntimeException(e);
}
}
然后开启事务
public static void startTransaction(){
try{
//得到当前线程上绑定连接开启事务
Connection conn = threadLocal.get();
if(conn==null){ //代表线程上没有绑定连接
conn = ds.getConnection();
threadLocal.set(conn);
}
conn.setAutoCommit(false);
}catch (Exception e) {
throw new RuntimeException(e);
}
}
执行完相应操作后提交事务
public static void commitTransaction(){
try{
Connection conn = threadLocal.get();
if(conn!=null){
conn.commit();
}
}catch (Exception e) {
throw new RuntimeException(e);
}
}
最后关闭连接
public static void closeConnection(){
try{
Connection conn = threadLocal.get();
if(conn!=null){
conn.close();
}
}catch (Exception e) {
throw new RuntimeException(e);
}finally{
//千万注意,解除当前线程上绑定的链接(从threadlocal容器中移除对应当前线程的链接)
threadLocal.remove();
}
}
第三种方法是用spring中的事务管理器,本次不做讨论
分享到:
相关推荐
### 开发中的Java中的事务管理 #### 一、引言 在Java开发中,事务管理是确保数据一致性和完整性的重要手段。特别是在涉及多个数据库操作时,如果这些操作不能作为一个整体成功执行,则整个事务应被回滚,以保持...
在软件开发过程中,事务管理是非常重要的一个环节,尤其是在处理数据库操作时。事务能够确保一系列数据库操作要么全部成功,要么全部失败,从而保持数据的一致性和完整性。`JdbcTemplate`作为Spring框架中的一个重要...
当在存储过程中使用事务时,可以更精细地控制数据更改的提交或回滚。例如,在给定的部分内容中,演示了一个名为`TransProc`的存储过程,它接收两个参数并执行两次插入操作。这些插入操作被封装在一个事务`InProc`中...
在本教程中,“从零开始学iOS7开发系列教程-事务管理软件开发实战”,我们将深入探索iOS应用开发,特别是针对iOS7系统。这个教程涵盖了从基础到进阶的多个方面,旨在帮助初学者掌握iOS7开发的核心技术,并通过实战...
### 存储过程与事务:深入理解DBHelper C#中的应用 在数据库操作中,存储过程与事务是两个至关重要的概念。存储过程是一组预编译的SQL语句,存储在数据库服务器上,用于执行复杂的数据库操作。事务则是对一组数据库...
在Spring Boot中,数据库事务控制是实现业务逻辑一致性的重要手段。本资料主要围绕Spring Boot如何进行数据库事务管理进行深入探讨。 首先,我们需要了解什么是事务。事务是数据库操作的基本单位,它保证了一组...
在IT行业中,尤其是在企业级应用开发中,声明式事务控制是一种常见的事务管理方式。它允许开发者通过配置,而不是代码来管理事务,使得事务处理更加简洁、易于维护。本主题聚焦于"声明式事务控制"在Spring 2.5与...
本篇文章将深入探讨Spring中的事务控制,包括事务的基本概念、事务的特性、Spring事务管理的模式以及如何在实际应用中配置和使用事务。 首先,事务是数据库操作的基本单位,确保数据的一致性和完整性。ACID(原子性...
在"lagou-transfer"这个场景中,可能是在描述一个关于招聘平台(如拉勾网Lagou)的数据迁移或转账过程,其中涉及到了事务控制以确保数据的准确无误。可能的操作包括用户信息的迁移、职位数据的同步,或者是在处理...
在 JDBC 中,事务控制主要依赖于 `java.sql.Connection` 接口的方法。默认情况下,JDBC 连接处于自动提交模式,这意味着每次执行 SQL 语句后都会自动提交事务。为了控制事务,我们需要关闭自动提交模式,然后手动...
以下是文章中提到的关键知识点,将详细阐述Delphi和MS SQL Server中存储过程的设计与使用方法,以及分布式数据库开发中事务的运用。 ### Delphi与MS SQL Server开发环境的介绍 Delphi是Embarcadero Technologies...
在企业级应用开发中,Java 平台上的Spring框架提供了强大的事务管理机制,极大地简化了事务处理过程,降低了开发人员的负担。Spring的事务管理主要围绕三个核心接口展开:PlatformTransactionManager、...
在Spring框架中,事务管理是核心功能之一,它为开发者提供了强大的事务控制能力,确保了数据的一致性和完整性。Spring支持编程式事务管理和声明式事务管理两种方式,这两种方式各有优缺点,适用于不同的开发场景。 ...
本项目"事务跟踪系统项目开发文档及源码"提供了全面的开发过程资料,帮助开发者深入理解系统的设计理念与实现方式。类似UrTracker这样的工具,它能够为团队提供强大的追踪能力,确保软件质量并提高开发效率。 开发...
SQL Server提供了事务控制语句,例如BEGIN TRANSACTION、COMMIT和ROLLBACK来管理事务。通过这些控制语句,数据库管理员可以显式地开始一个事务、在事务成功完成后提交事务,或者在遇到错误时回滚事务到某个一致的...
- 开启事务注解:在需要事务控制的Service或Controller层方法上添加@Transactional注解。 4. **项目启动流程** - 环境部署:首先,确保所有依赖服务(如数据库、消息队列、配置中心等)正常运行。 - 应用启动:...
在SSH整合中,Spring的AOP事务控制会与Hibernate协同工作,确保用户登录过程中的数据操作符合ACID(原子性、一致性、隔离性和持久性)原则。例如,当用户尝试登录时,相关操作如检查用户名、密码,更新登录状态等,...