package com.bjpowernode.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; /** * @Author:杨青 * @Time:2021/10/26 19:24 * @Description: * 1.sql脚本: * drop table if exists t_act; * create table t_act( * actno int, * balance double(7,2) * ); * insert into t_act (actno,balance) values(111,20000); * insert into t_act (actno,balance) values(222,0); * select *from t_act; * 2.重点三行代码: * conn.setAutoCommit(false); //开启事务 * conn.commit(); //提交事务(事务结束) * conn.rollback(); //回滚事务(事务结束) */ public class JDBCTest11 { public static void main(String[] args) { Connection conn=null; PreparedStatement ps=null; try { //1.类加载完成注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode?useSSL=false","root","123456"); //将自动提交机制修改为手动提交 conn.setAutoCommit(false); //开启事务 //3.获取预编译数据库操作对象 String sql="update t_act set balance=? where actno=?"; ps=conn.prepareStatement(sql); //给占位符传值 ps.setDouble(1,10000); ps.setInt(2,111); int count=ps.executeUpdate(); //再给占位符传值 ps.setDouble(1,10000); ps.setInt(2,222); count+=ps.executeUpdate(); System.out.println(count==2?"转账成功":"转账失败"); //程序能够到这里说明以上程序没有异常,事务结束,手动提交数据 conn.commit(); //提交事务 } catch (Exception e) { //回滚事务 if(conn!=null) { try { conn.rollback(); } catch (SQLException throwables) { throwables.printStackTrace(); } } e.printStackTrace(); } finally { //6.释放资源 if(ps!=null){ try { ps.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } if(conn!=null){ try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } } } }