1.当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL语句。
2.如果想让多条sql语句,共用一个事物,则需要关闭jdbc默认的事务提交,
设置事务的提交方式为非自动提交:
conn.setAutoCommit(false);
Connection con =null; Statement st=null; ResultSet rs=null; PreparedStatement ps=null; publicvoid startTransaction(){ con = DBCManager.getConnect();//获取连接对象 try { //设置事务的提交方式为非自动提交: con.setAutoCommit(false); //将需要添加事务的代码一同放入try,catch块中 //创建执行语句 String sql ="delete from me where id = 7"; String sql1 = "update me set name ='chengong' ,age ='34' where id =4"; //分别执行事务 ps = con.prepareStatement(sql); ps.executeUpdate(); ps = con.prepareStatement(sql1); ps.executeUpdate(); //在try块内添加事务的提交操作,表示操作无异常,提交事务。 con.commit(); } catch (SQLException e) { try { //.在catch块内添加回滚事务,表示操作出现异常,撤销事务: con.rollback(); } catch (SQLException e1) { // TODO Auto-generatedcatch block e1.printStackTrace(); } e.printStackTrace(); }f
(1)关闭自动提交事务。通过设置连接的自动提交事务属性为false,如下: Connection conn = DriverManager.getConnection("连接URL", "用户名", "密码"); //关闭自动提交事务 conn.setAutoCommit(false); (2)如果执行顺利,提交事务;一旦发生异常,回滚(rollback)事务,如下: try{ conn.setAutoCommit(false); //关闭自动提交事务 stmt = conn.createStatement(); //创建会话 stmt.executeUpdate("sql语句"); conn.commit(); //提交事务 }catch(Exception e) { e.printStackTrace(); conn.rollback(); //回滚事务 } (3)关闭连接,如下: finally{ if(stmt != null) stmt.close(); if(conn != null) conn.close(); }