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()方法插入不成功,所以两条记录都不插入

结果截图如下:

posted @ 2016-08-04 22:05  UniqueColor  阅读(294)  评论(0编辑  收藏  举报