• JDBC编程之事务处理


    JDBC中的事务处理指的是事务的一致性等问题,例如插入一条数据(id,name,password)到表中,另一条数据(address,id)到另一张表中,并且两条数据是相关联的,那么假设第一条数据插入成功,但是第二条数据由于异常没有插入成功,那么此时为了保证事务的一致性、完整性,则两条数据都不能够插入。

    1、

    创建Conn连接类

    Conn.java

     1 package com.test.conn;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 
     6 
     7 
     8 public class Conn {
     9 
    10     public Connection getCon(){
    11         try{
    12             Class.forName("com.mysql.jdbc.Driver");
    13             String url = "jdbc:mysql://localhost/mytest?useUnicode = true&characterEncoding=utf-8";
    14             String user="root";
    15             String password="";
    16             Connection conn =  DriverManager.getConnection(url,user,password);
    17             System.out.println(conn.getMetaData().getURL());
    18             return conn;
    19         }
    20         catch(Exception e){
    21             e.printStackTrace();
    22             return null;
    23         }
    24     }
    25 }

    2、Service_ForData.java 用来测试调用,其中加入了事务处理

     1 package com.test.service;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 
     8 public class Service_ForData {
     9     
    10     private static Connection conn ;
    11     private static PreparedStatement pstmt;
    12     
    13     public static void main(String[] args) {
    14         conn = new com.test.conn.Conn().getCon();
    15         
    16         try {
    17             conn.setAutoCommit(false);
    18             addPerson(conn);
    19             addAddress(conn);
    20             conn.commit();
    21         } catch (Exception e) {
    22             System.out.println("捕获到异常");
    23             e.printStackTrace();
    24             try {
    25                 conn.rollback();
    26                 System.out.println("事务回滚成功");
    27             } catch (SQLException e1) {
    28                 
    29                 e1.printStackTrace();
    30             }
    31             
    32         }
    33         
    34     }
    35     
    36     public static void addPerson(Connection conn) throws Exception{
    37         
    38 
    39             pstmt = conn.prepareStatement("insert into person (id,name,password) values(?,?,?)");
    40             pstmt.setInt(1,10);
    41             pstmt.setString(2,"tom");
    42             pstmt.setString(3, "123456");
    43             pstmt.executeUpdate();
    44             
    45         
    46     }
    47     
    48     public static void addAddress(Connection conn) throws Exception{
    49           pstmt = conn.prepareStatement("insert into address (id,address,userid) values(?,?,?)");
    50           pstmt.setInt(1, 1);
    51           pstmt.setString(2, "obsnsjka");
    52           pstmt.setInt(3, 10);
    53           pstmt.executeUpdate();
    54     }
    55     
    56 
    57 }

    由于addAddress()方法插入不成功,所以两条记录都不插入

    结果截图如下:

  • 相关阅读:
    Windows / Linux / MacOS 设置代理上网的方法汇总
    Centos7 配置 sendmail、postfix 端口号25、465
    CentOS 6/7 配置 sendEmail 发送邮件
    Python 发送 email 的三种方式
    Linux curl 命令模拟 POST/GET 请求
    Python + Selenium + Chrome 使用代理 auth 的用户名密码授权
    Python + Selenium + Firefox 使用代理 auth 的用户名密码授权
    Jenkins+JMeter+Ant 接口持续集成
    接口自动化、移动端、web端自动化如何做?
    pytest--命令行参数
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5738570.html
Copyright © 2020-2023  润新知