• 数据库——事务、保存点、批量更新


    事务(transaction)
        当所有语句都顺利执行后,事务可以被提交(commit)。若某个语句遇到错误,那么事务将被回滚。
        将多个命令组合成事务的原因是为了确保数据库完整性(database integrity)。
        默认情况下,数据库连接处于自动提交模式,一旦SQL命令被执行便被提交给数据库。一旦命令被提交,就无法对它进行回滚操作。
       
        使用事务时,需关闭自动提交模式  conn.setAutoCommit(false);
        创建一个语句对象  Statement stat = conn.createStatement();
        然后任意多次地调用executeUpdate方法  stat.executeUpdate(command1);
                                             stat.executeUpdate(command2);
        执行了所有命令后,调用commit方法提交  conn.commit();
        如果出现错误,调用rollback()回滚  conn.rollback();
       
    保存点
        使用保存点,可以在回滚操作时只回滚到该保存点即可,而非事务的开头。
        Statement stat = conn.createStatement();//开始事务,rollback()回退到事务开头
        stat.executeUpdate(command1);
        Savepoint svpt = conn.setSavepoint();//设置保存点,rollback(svpt)回退到该点
        stat.executeUpdate(command2);
        ...
        conn.commit();
        conn.releaseSavepoint(svpt);//当不需要保存点时,必须要释放
       
    批量更新
        一个命令序列作为一批操作同时被收集和提交。
        处于同一批中的容器可以是INSERT、UPDATE和DELETE等操作,也可以是数据库定义命令,如CREATE TABLE和DROP TABLE。但是,在批量处理中添加SELECT命令会抛异常。
       
        批量处理首先需创建Statement对象
        Statement stat = conn.createStatement();
        然后调用addBatch方法:
        String command = "CREATE TABLE ...";
        stat.addBatch(command);
        while(...){
            command = "INSERT INTO ... VALUES(...)";
            stat.addBatch(command);
        }
        提交整个批量更新语句
        int[] counts = stat.executeBatch();//返回一个记录数的数组
       
        为了在批量模式下正确的处理错误,必须将批量执行的操作视为单个事务。如果批量更新失败,必须回滚到批量操作开始之前的状态。
        首先,关闭自动提交模式,然后收集批量操作,执行并提交该操作,最后恢复最初自动提交模式:
        boolean autoCommit = conn.getAutoCommit();
        conn.setAutoCommit(false);
        Statement stat = conn.getStatement();
        ...
        //keep calling stat.addBatch(...);
        ...
        stat.executeBatch();
        conn.commit();
        conn.setAutoCommit(autoCommit);

  • 相关阅读:
    iOS 关于字体根据不同屏幕尺寸等比适配的问题(zz)
    安卓开发:一种快速提取安卓app的UI图标资源的方法
    申请邓白氏编码的时候总是提示 Enter a valid Street Address 怎么办?
    利用日期、经纬度求日出日落时间 C语言程序代码(zz)
    JS导出Excel 代码笔记
    Bootstrap系列 -- 44. 分页导航
    Bootstrap系列 -- 43. 固定导航条
    Bootstrap系列 -- 42. 导航条中的按钮、文本和链接
    Bootstrap系列 -- 41. 带表单的导航条
    Bootstrap系列 -- 40. 导航条二级菜单
  • 原文地址:https://www.cnblogs.com/it-mh/p/11205533.html
Copyright © 2020-2023  润新知