zoukankan      html  css  js  c++  java
  • JSP Web开发入门系列(二)JDBC事务管理

        数据库的事务管理核心是:ACID。本文主要涉及的是其中的原子性(Atomic)。原子性,遵循“All or Nothing”原则。简单地来说就是将任意多个SQL语句看作一个整体,只有所有的这些SQL全部成功执行了,DBMS才会保存对数据库的修改,称之为事务提交;否则,数据库恢复到SQL语句执行前的状态,称之为事务回滚。不同数据库有不同版本的回滚版本。

        JDBC下有两种事务模式分别为隐式和显式模式。前者是JDBC下默认开启的,不必通过事务提交,直接将修改的数据保存在数据库中。后者使用setAutoCommit 方法来将隐式转换成显式模式,手工提交事务,即是说显示模式需要使用commit方法提交后,对数据库的修改才生效。 setAutoCommit方法定义如下:

    void setAutoCommit(boolean autoCommit) throws SQLEXception;  

      以下的代码是使用PreparedStament对象执行的动态SQL来对数据库进行事务管理。主要是向数据库中pet表增加一条记录。

     

    代码
    package JDBCTest;
    import java.sql.*;
    publicclass Transaction {

    /**
    *
    @param args
    *
    @author viki
    * 事务提交与回滚
    */
    publicstaticvoid main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    Class.forName("com.mysql.jdbc.Driver");
    String serverName, dbName,userName,passWord;
    serverName
    ="localhost";
    dbName
    ="viki";
    userName
    ="root";
    passWord
    ="123";
    String url
    ="jdbc:mysql://"+serverName+"/"+dbName+"?characterEncoding=UTF8";
    Connection conn
    =DriverManager.getConnection(url,userName,passWord);
    try
    {
    // 开始事务
    conn.setAutoCommit(false);
    Statement stmt
    = conn.createStatement();
    System.out.println(
    "Update the record:"+ stmt.executeUpdate("UPDATE pet SET sex ='m'"));
    stmt.close();
    PreparedStatement pstmt
    = conn.prepareStatement("INSERT INTO pet (name,owner,species) VALUES (?,?,?)");
    pstmt.setString(
    1,"dave");
    pstmt.setString(
    2, "viki");
    pstmt.setString(
    3, "pig");
    System.out.println(
    "Update the record:"+pstmt.executeUpdate());
    pstmt.close();
    //提交事务
    conn.commit();
    }
    catch (Exception e) {
    // TODO: handle exception
    // 事务回滚
    conn.rollback();

    }
    }

    }

     

        只有在事务提交之后,数据库才会保存修改数据。在catch块中,使用了回滚方法,如果SQL语句出错的话,将会抛出异常,程序执行回滚任务。数据库将不会更改。

  • 相关阅读:
    【动态规划】Column Addition @ICPC2017Tehran/upcexam5434
    【高精度&想法题】Count the Even Integers @ICPC2017HongKong/upcexam5563#Java
    【二分】Base Station Sites @ICPC2017HongKong/upcexam5559
    【想法题】Knot Puzzle @AtCoder Grand Contest 002 C/upcexam5583
    【搜索】传感器 @upcexam6023
    Unity 3D 开发 —— 脚本编程
    Kinect 开发 —— 骨骼数据与彩色影像和深度影像的对齐
    Kinect 开发 —— 杂一
    Kinect 开发 —— 面部追踪
    Kinect 开发 —— Kinect studio
  • 原文地址:https://www.cnblogs.com/ventlam/p/mysqltransaction.html
Copyright © 2011-2022 走看看