zoukankan      html  css  js  c++  java
  • JDBC事务机制

    案例10:JDBC事务机制:

    package com.java.JDBC;
    
    
    import java.sql.*;
    
    
    /*
    JDBC事务机制:
        1 JDBC中的事务是自动提交的,什么是自动提交?
            只要执行任意一条DML语句,则自动提交一次。这是JDBC默认的事务行为。
            但是在实际的业务当中,通常都是N条DML语句共同联合才能完成的,必须
            保证他们这些DML语句在同一个事务中同时成功或者同时失败。
            
        2 以下程序先来验证一下JDBC的事务是都是自动提交机制。
            测试结果:JDBC中只要执行任意一条DML语句,就提交一次。
    */
    public class JDBCTest10 {
        public static void main(String[] args) {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
        
            try {
                // 1 注册驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 2 获取连接
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","333");
                // 3 获取预编译数据库操作对象
                String sql = "update dept set dname = ? where deptno = ?";
                ps = conn.prepareStatement(sql);
                
                // 第一次给占位符传值
                ps.setString(1,"x部门");
                ps.setInt(2,30);
                int count = ps.executeUpdate();
                System.out.println(count);
                
                
                // 重新给占位符传值
                ps.setString(1,"y部门");
                ps.setInt(2,20);
                count = ps.executeUpdate();
                System.out.println(count);
                
            
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 6 释放资源
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            
                if (ps != null) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    案例11:通过JDBC模拟银行转账系统

    package com.java.JDBC;
    
    
    import java.sql.*;
    
    
    /**
    * sql脚本:
    *     drop table if exists t_act;
    *     create table t_act(
    *         actno bigint,
    *         balance double(7,2) // 注意:7表示有效数字的个数,2表示小数位的个数。
    *     );
    *
    *     insert into t_act(actno,balance) values(111,20000);
    *     insert into t_act(actno,balance) values(222,0);
    *     commit;
    *
    *     select * from t_act;
    *
    *     重点三行代码?
    *      conn.setAutoCommit(false);
    *      conn.commit();
    *      conn.rollback();
    */
    public class JDBCTest11 {
        public static void main(String[] args) {
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
        
            try {
                // 1 注册驱动
                Class.forName("com.mysql.jdbc.Driver");
                
                // 2 获取连接
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase","root","333");
                
                // 将自动提交机制修改为手动提交
                conn.setAutoCommit(false);// 开启事务
                
                // 3 获取预编译数据库操作对象
                String sql = "update t_act set balance = ? where actno = ?";
                ps = conn.prepareStatement(sql);
                
                
                // 给?传值
                ps.setDouble(1,10000);
                ps.setInt(2,111);
                int count = ps.executeUpdate();
                
                /*String s = null;
                s.toString();*/
                
                // 再给?传值
                ps.setDouble(1,10000);
                ps.setInt(2,222);
                count += ps.executeUpdate();
                
                
                System.out.println(count == 2 ? "转账成功" : "转账失败");
            
                // 程序能够走到这里说明以上程序没有异常,事务结束,手动提交数据
                conn.commit();// 提交事务
                
            } catch (Exception e) {
                // 回滚事务
                if (conn != null) {
                    try {
                        conn.rollback();
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
                e.printStackTrace();
            } finally {
                // 6 释放资源
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            
                if (ps != null) {
                    try {
                        ps.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            
                if (conn != null) {
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
  • 相关阅读:
    appium 学习教程
    初识Airtest
    C语言的数据类型
    C#黑白棋制作~
    C#黑白棋制作
    C#编写自动关机程序复习的知识
    C语言的预处理命令
    构建智能DNS域名解析服务器
    NFS共享服务
    安装ftp 并在ftp上构建yum仓库 (内网构建,比如主机上不了网)
  • 原文地址:https://www.cnblogs.com/xlwu/p/13654082.html
Copyright © 2011-2022 走看看