zoukankan      html  css  js  c++  java
  • jdbc—事务

    1.事务的基本概念(查询是没有事务的)

      - 一组要么同时执行成功,要么同时执行失败的SQL语句。是数据库操作的一个执行单元。

      - 事务开始于:

        - 连接到数据库上,并执行一条DML语句(INSERT,UPDATE或DELETE)。

        - 前一个事务结束后,又输入了另一条DML语句。

      - 事务结束于:

        - 执行COMMIT或ROLLBACK语句。

        - 执行一条DDL语句,例如CREATE TABLE语句;在这种情况下,会自动执行COMMIT语句。

        - 执行一条DCL语句,例如GRANT语句;在这种情况下,会自动执行COMMIT语句。

        - 断开与数据库的连接。

        - 执行了一条DML语句,该语句却失败了,在这种情况中,或为这个无效的DML语句执行ROLLBACK语句。

    2.事务的四大特点(ACID)

      - atomictiy(原子性)

        表示一个事务内的所有操作是一个整体,要么全部成功,要么全部失败。

      - consistency(一致性)

        表示一个事务内有一个操作失败时,所有更改过的数据都必须回滚到修改前的状态。

      - isolation(隔离性)

        事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的数据,事务不会查看

        中间状态的数据 

          - 事务隔离级别从低到高(效率从高到低): 

            - 读取未提交(Read Uncommited)

            - 读取已提交(Read commited)

            - 可重复读(Repeatable Read)

            - 序列化(serializable)(锁表)

      - durability(持久性)

        持久性事务完成之后,它对于系统的影响是永久性的。

      

    package com.yf.jdbc.test;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * 测试事务
     * @author yangf
     *
     */
    public class Demo06 {
        public static void main(String[] args) {
            Connection con = null;
            PreparedStatement ps1 = null;
            PreparedStatement ps2 = null;
            try {
                // 加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 获得connection对象 建立与数据库连接
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc", "root", "123456");
                // JDBC中默认自动提交事务
                con.setAutoCommit(false);
                
                ps1 = con.prepareStatement("insert into t_user (username,pwd) values (?,?)");
                ps1.setString(1, "yyf");
                ps1.setInt(2, 22222);
                ps1.execute();
                System.out.println("插入一个用户yyf");
                
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                
                ps2 = con.prepareStatement("insert into t_user (username,pwd) values (?,?,?)");
                ps2.setString(1, "wwwy");
                ps2.setInt(2, 3333);
                ps2.execute();
                System.out.println("插入一个用户wwwy");
                
                
                con.commit();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                try {
                    con.rollback();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            } catch (SQLException e) {
                e.printStackTrace();
                try {
                    con.rollback();
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            } finally {
                if (ps1 != null) {
                    try {
                        ps1.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (con != null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
  • 相关阅读:
    CentOS5.6下SVN的安装
    在servlet中的init方法中使用getInitParameter方法空指针错误
    Linux iostat监测IO状态【转】
    自己实现一个list比较器 实现Comparator()接口
    一些常用的随机实现
    java里null强转为某个类会报错吗?
    java游戏服务器简单工厂模式
    起个头!准备写一个 设计模式系列
    HashMap根据value值排序
    java游戏服务器 策略+简单工厂
  • 原文地址:https://www.cnblogs.com/yangfanasp/p/6858217.html
Copyright © 2011-2022 走看看