多条数据操作--回滚

来源:互联网 发布:网络风险监测预警制度 编辑:程序博客网 时间:2024/04/28 20:38

这几天好多地方都看到作为程序员写博客的重要性,所以让我也投身到革命浪潮中吧

问题

>今天弄javaweb后台时,遇到需要同时insert多个表的需求,因为有多条插入语句,第一个插入成功,第二个插入失败,第二条后的数据没有插入成功,第一条数据就会变成脏数据,因此要回滚

解决办法

用的com.mysql.jdbc.Driver

//连接数据库,conn是我在连接数据库类中留的getConn方法=,=嘿嘿,怕忘留个记号Connection conn = DriverManager.getConnection(url,username,password);conn.setAutoCommit(false);//false为sql操作手动提交,true为每次对数据库操作时自动提交try{    String sql1 = “表1插入数据...”;    String sql2 = “表2插入数据...”;    stmt.addBatch(sql1);    stmt.addBatch(sql2);    stmt.executeBatch();            conn.commit();//因为AutoCommit设置为false所以要手动提交    //AutoCommit是true会出现错误:"Can't call rollback when autocommit=true"} catch (SQLException e) {    try {        conn.rollback();//回滚    } catch (SQLException e1) {            System.out.println("rollback错了");            e1.printStackTrace();    }       }   

PS:当时没弄明白的问题

  1. 拼sql字符串的时候发现eclipse里字符串不能换行,如果换行要在末尾加引号、第二行用+“内容”的形式
  2. String sql 用与增删改后,不可以直接将此sql字符串改为该表的查询语句,否则会报错
  3. ps2.中的错误是:can not issue null query sql,我又试了一下,结果又可以了重复利用了

PL/SQL也可以回滚

sql-定义变量:

    //sql:变量    select @id :=2    select @jn :=jname from basicinfoj where jid = @id;

回滚事物:

API : SET XACT_ABORT { ON | OFF }
ON:整个事务将终止并回滚 OFF只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理

SET XACT_ABORT ONBEGIN TRAN//标记事务开始     删除...     插入...     修改...COMMIT TRAN //提交事务/*执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态*/
0 0
原创粉丝点击