• JDBC事务支持及try-with-resources


    JDBC事务支持

    JDBC连接的事务支持由Connection对象提供,且默认自动提交,即默认事务是关闭的状态。也就是说,SQL语句执行将会立即提交至数据库,永久生效。

    JDBC中关于事务的操作:

    conn.setAutoCommit(false);	//关闭自动提交,开启事务
    
    /*下面俩需要在开启事务之后才能使用*/
    conn.commit();				//提交事务
    conn.rollback();			//回滚事务
    

    需要注意的是:当遇到一个未处理的SQLException的异常时,系统会非正常退出,事务会自动回滚。但如果显式捕捉该异常,则需要显式地回滚事务。

    try-with-resources

    Java7增强的try语句的功能,保证那些实现Closeable接口的实现类能够自动关闭资源,不用显示的finally关闭资源。

    细节可参考参考:JDK7的try-with-resource方式的使用

    package cn.my.jdbcTransaction;
    
    import cn.my.jdbcPra.util.JDBCUtils;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    
    /**
     * @auther Summerday
     * JDBC的事务支持
     */
    public class JDBCDemo {
        public static void main(String[] args) {
            //获取连接
            try (Connection conn = JDBCUtils.getConnection()) {
                //关闭自动默认提交,开启事务
                conn.setAutoCommit(false);
                //定义sql
                //-500
                String sql1 = "update account set balance = balance - ? where id = ?";
                //+500
                String sql2 = "update account set balance = balance + ? where id = ?";
    
                //执行sql对象的prs
                try (PreparedStatement prs1 = conn.prepareStatement(sql1);
                     PreparedStatement prs2 = conn.prepareStatement(sql2)) {
                    //设置参数
                    prs1.setDouble(1, 500);
                    prs1.setInt(2, 1);
    
                    prs2.setDouble(1, 500);
                    prs2.setInt(2, 2);
    
                    //执行sql1语句
                    prs1.executeUpdate();
                    //执行sql2语句
                    prs2.executeUpdate();
                } catch (Exception e) {
                    System.out.println("roll back");
                    conn.rollback();
                }
                //提交事务
                conn.commit();
                System.out.println("commit!");
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    
  • 相关阅读:
    IDEA创建Javaweb工程
    配置Info.plist (设置状态栏样式、自定义定位时系统弹出的提示语、配置3DTouch应用快捷菜单)
    关于IQKeyBoardManager挤出导航栏的解决方案
    iOS应用内跳转系统设置相关界面的方法
    解决xcode打开时loading假死的问题
    iOS图片按比例显示
    iOS开发-UITableView顶部图片下拉放大
    自定义按钮 图片+文字
    iOS开发-NSOperation与GCD区别
    iOS开发-UINavigationBar透明设置
  • 原文地址:https://www.cnblogs.com/summerday152/p/12459197.html
Copyright © 2020-2023  润新知