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()方法插入不成功,所以两条记录都不插入
结果截图如下:
时间: 2024-12-28 08:50:59