jdbc(ikun)实现事务的开启,提交,回滚代码示例

1.事务:一个多含多个步骤的业务操作。如果这个业务操作被事务管理,则多个步骤要么同时成功,要么同时失败。
2.操作:
    1.开启事务
    2.提交事务
    3.回滚事务
3。使用Connection对象来管理事务
    *开启事务;setAutoCommit(boolean autoCommit)调用该方法设置参数为false则为开启事务
    *提交事务:commit();
    *回滚事务:rollback();

模拟银行转账

一个失去荔枝的女大学生给bkpp赚钱的故事,以防她过度追星,我们设置math异常让事务回顾,让她永远给bkpp赚不了钱,然后报名算法课!!!

代码如下

做的时候遇到问题:给?赋值时候比如(sql中的第鸡个?的值,需要的值)
写的有点不符合逻辑,慢慢看把,测试结果就不放了,代码是没有问题的

package cs.itcast.jdbc;

import java.sql.*;


public class jdbcshiwu {
    public static void main(String[] args) {
        PreparedStatement pstmt1 = null;
        PreparedStatement pstmt2 = null;
        Connection conn = null;
        //注册驱动
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获取连接对象
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zzt?serverTimezone=GMT&useSSL=false","root","root");
            //定义sql
            conn.setAutoCommit(false);
            String sql1 = "update account set balance =balance - ? where name = ?";
            String sql2 = "update account set balance =balance + ? where name =  ?";
            //获取执行sql对象
            pstmt1 =  conn.prepareStatement(sql1);
            pstmt2 =  conn.prepareStatement(sql2);
            //执行sql
            //设置啊参数
            pstmt2.setDouble(1,5000);
            pstmt2.setString(2,"bkpp");

            pstmt1.setDouble(1,5000);
            pstmt1.setString(2,"张润琦");

            //执行sql
            pstmt2.executeUpdate();
            //手动制造异常
            int i =3/0;
            pstmt1.executeUpdate();
                conn.commit();
        } catch (Exception e) {
            //设置事务回滚
            try {
                if(conn!=null)
                conn.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
        }
        finally {
            if(pstmt1!=null) {
                try {
                    pstmt1.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(pstmt2!=null) {
                try {
                    pstmt2.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

你可能感兴趣的:(java,数据库,spring)