JDBC Transaction

两条需求sql需要同时执行,如银行转账等。

1.将AutoCommit()属性设置为false不让自动提交

2.执行自己的操作

3.自己进行提交commit(),提交完之后将AutoCommit()属性置为true。catch到任何SQLException,要rollback。

import java.sql.*;

public class JDBCTransaction {
    //JDBC driver name and database URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
    static final String DB_URL = "jdbc:mysql://127.0.0.1:3306/firstDB?useSSL=false&useUnicode=true&characterEncoding=UTF-8";
    static final String USER = "root";
    static final String PASS = "123";

    public static void main(String[] args)
    {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("Connecting to database...");
            conn = DriverManager.getConnection(DB_URL,USER,PASS);
            conn.setAutoCommit(false);
            System.out.println("Creating statement...");
            stmt = conn.createStatement();
            stmt.addBatch("insert into book values(11,'巴黎圣母院',51,600)");
            stmt.addBatch("insert into book values(12,'阿Q正传',52,550)");
            stmt.addBatch("insert into book values(13,'孔乙己',53,580)");
            stmt.executeBatch();
            conn.commit();
            conn.setAutoCommit(true);
            stmt.close();
            conn.close();
        }catch (ClassNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (SQLException se)
        {
            se.printStackTrace();
            try {
                if (conn != null)
                    conn.rollback();
                    conn.setAutoCommit(true);
            }catch (SQLException e1)
            {
                e1.printStackTrace();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }finally {
            try {
                if (stmt!=null)
                {
                    stmt.close();
                    stmt = null;
                }
            }catch (SQLException se2)
            {
                se2.printStackTrace();
            }
            try
            {
                if (conn!=null)
                {
                    conn.close();
                    conn = null;
                }
            }
            catch (SQLException se)
            {
                se.printStackTrace();
            }
            try{
                if (rs!=null)
                {
                    rs.close();
                    rs = null;
                }
            }catch (SQLException se1)
            {
                se1.printStackTrace();
            }
        }
        System.out.println("try finish");
    }
}
//输出
Connecting to database...
Creating statement...
try finish
Snip20191110_4.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • java事务的处理 转 https://www.cnblogs.com/Bonker/p/5417967.html...
    小小的Jobs阅读 1,434评论 0 1
  • 预编译sql处理(防止sql注入) Statement : 执行SQL命令CallableStatement : ...
    奋斗的老王阅读 1,164评论 2 52
  • 来源:转载 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用...
    我是强强阅读 376评论 0 2
  • 以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容。 JDBC常见面试题 JDBC操...
    Java3y阅读 1,740评论 0 15
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,677评论 0 4