JDBC的事务。

来源:互联网 发布:美好的诗句 知乎 编辑:程序博客网 时间:2024/05/16 16:08
package cn.hikcn.jdbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.sql.PreparedStatement;/** *  关于JDBC的事务 *      1、JDBC默认情况下,在没有设置事务的前提下,事务采用的是默认自动提交,这种方式显然不符合现实的业务逻辑。 *      2、什么是自动提交?怎么理解这个自动提交? *          在JDBC中只要执行一条DML语句就提交一次。 *      3、怎么避免自动提交,怎么改成手动提交? *          显然在现实业务逻辑中,一个万众的事务是需要多条DML语句共同联合完成的。 *          需要将自动提交机制关闭,修改成手动提交。conn.setAutoCommit(false); *          当一个事务真正结束时候,手动提交。 conn.commit(); *      4、什么时候回滚? *          若执行过程中任何一步出现异常,应当回滚。conn.rollback(); */public class JdbcTest2 {    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:3366/study", "root", "1234");            //开启事务            //关闭自动提交机制            conn.setAutoCommit(false);//不再支持自动提交            //3、获取预编译的数据库操作对象            String sql = "insert into info(username,password) values(?,?)";            ps = conn.prepareStatement(sql);            //给问号赋值            ps.setString(1, "zhangsan");            ps.setString(2, "12345");            //4、执行sql语句【DML:insert update delete 】            int count = ps.executeUpdate();            //在给问号赋值            ps.setString(1, "zhangsan");            ps.setString(2, "12345");            count += ps.executeUpdate();            System.out.println(count);            //事务若执行到此处,表示执行完成,应当手动提交            conn.commit();        }catch(Exception e){            //若在以上事务执行过程中发生异常,则回滚。            if(conn != null){                try {                    conn.rollback();                } catch (SQLException e1) {                    // TODO Auto-generated catch block                    e1.printStackTrace();                }            }             e.printStackTrace();        }finally{            //6、释放资源            if(ps != null){                try {                    ps.close();                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            if(conn != null){                try {                    conn.close();                } catch (SQLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }    }}
0 0