zoukankan      html  css  js  c++  java
  • 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()方法插入不成功,所以两条记录都不插入

    结果截图如下:

  • 相关阅读:
    Install Failed Insufficient Storage, 解决 ADB 安装APK失败问题
    finding-the-smallest-circle-that-encompasses-other-circles
    PyTorch for Semantic Segmentation
    Semantic-Segmentation-DL
    Awesome Semantic Segmentation
    应用于语义分割问题的深度学习技术综述
    JS打开浏览器
    Overcoming iOS HTML5 audio limitations
    Android APP Testing Tutorial with Automation Framework
    基于方向包围盒投影转换的轮廓线拼接算法
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/5738570.html
Copyright © 2011-2022 走看看