如何用java开启mysql事务,要求详细
看你是什么事务,jdbc事务,还是分布式事务,还是容器事务
①.,编程式事务管理(jdbc的事务是绑定在connection上的)
Connection conn = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
conn.setAutoCommit(false); //取消自动提交
PreparedStatement ps = conn.prepareCall("update something");
ResultSet rs = ps.executeQuery();
conn.commit(); //手动提交
}
catch (Exception e)
conn.rollback();
e.printStackTrace();
finally
conn.close();
先在工程的application.xml配置文件中添加如下代码,开启事务
!-- 声明式事务控制配置 --
tx:annotation-driven transaction-manager="txManager"/
bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
property name="datasource" ref="bassDataSource"/property
/bean
然后在你需要开启事务的接口前面添加注解
@Transactional(rollbackFor = IOException.class)
public void add(String name) throws IOException
System.out.println("可以再类里和方法里面添加事务注解0~0");
throw new IOException();
直接调用接口方法就好
①可以直接使用spring◆atomikos框架进行管理
参考:
就不贴测试代码了,自己看着配置吧
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
//分布式事务处理
public class transferAccount
@SuppressWarnings("null")
public void testTransferAccount()
UserTransaction userts = null;
Connection connA = null;
PreparedStatement psA = null;
InitialContext context = null;
Connection connB = null;
PreparedStatement psB = null;
//获得事务管理对象
userts = (UserTransaction) context.lookup("java:comp/UserTransaction");
//获取两个数据库
connA = getDataSourceA().getConnection();
connB = getDataSourceB().getConnection();
//开启事务
userts.begin();
//sql语句
psA = connA.prepareStatement("我加1");
psB = connB.prepareStatement("我减1");
//执行sql
psA.executeUpdate();
psB.executeUpdate();
//事务提交
userts.commit();
} catch (Exception e)
userts.rollback();
} catch (IllegalStateException | SecurityException
| SystemException e1)
e1.printStackTrace();
psA.close();
psB.close();
connA.close();
connB.close();
} catch (SQLException e)
public DataSource getDataSourceA()
MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setDatabaseName("mysql");
dataSource.setServerName("server");
dataSource.setUser("test");
dataSource.setPassword("test");
return dataSource;
public DataSource getDataSourceB()
dataSource.setUser("test1");
dataSource.setPassword("test1");
你用同一个connection调用,
调用后再调用connection的comit()方法!
你spring事务理解不到位,再去看下相关资料吧.
你上边所说的inerst update 只要将dao放到一个service下去管理就行 .
spring在service中事务管理,是当他调用service中的一个方法的时候 就会开启一个事务,
直到你执行完这个方法,才会commit.所以只要其中有一个失败都会回滚
@Transactional
public void save() {
//你的代码逻辑
如果没有使用Spring框架,可以用JDBC处理事务,如下:
try{
con.setAutoCommit(false);//开启事务 ......
con.commit();//try的最后提交事务
} catch() {
con.rollback();//回滚事务
以上就是土嘎嘎小编为大家整理的java给代码加上事务相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!