[Js-JDBC]事务

JDBC事务

 1 package com.neu.jdbc;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.PreparedStatement;
 6 import java.sql.SQLException;
 7 
 8 /**
 9  * 关于JDBC的事务 1、JDBC 默认情况下,事务是自动提交的:即在 JDBC 中执行一条 DML语句就执行一条 ,这种显然是不符合现实的业务逻辑的
10  * 2、什么是自动提交?怎么理解自动提交? 
11  *         在JDBC中只有执行一次DML语句,就提交一次。
12  * 3、怎么避免自动提交?怎么改成手动提交?
13  *         显然在现实的业务逻辑下,一个完整的事务时需要多条DML共同完成的 
14  *        需要将自动提交机制关闭,修改成手动提交 当一个事务真正结束的时候提交 
15  * 4、什么时候回滚?
16  *         若执行过程中任何一步出现异常,应当回滚
17  * 5、JDBC事务代码总结:
18  *         conn.setAutoCommit(false);
19  *         ……
20  *         ……
21  *         conn.commit();
22  *         ……
23  *         conn.rollback();
24  * 
25  * @author imsha
26  *
27  */
28 public class JDBCTest09 {
29     public static void main(String[] args) {
30         Connection conn = null;
31         PreparedStatement ps = null;
32 
33         try {
34             // 注册驱动
35             Class.forName("com.mysql.jdbc.Driver");
36             // 获取连接对象
37             conn = DriverManager.getConnection("jdbc:mysql://localhost:3366/bjpowernode", "root", "123");
38 
39             // 开启事务
40             // 关闭自动提交机制
41             conn.setAutoCommit(false);// 不再支持自动提交
42 
43             // 获取数据库操作对象
44             String sql = "insert into dept(deptno,dname,loc) values (?,?,?)";
45             ps = conn.prepareStatement(sql);
46             ps.setInt(1, 60);
47             ps.setString(2, "市场部");
48             ps.setString(3, "北京");
49             // 执行SQL语句
50             int count = ps.executeUpdate(sql);
51 
52             // 重新给?赋值
53             ps.setInt(1, 60);
54             ps.setString(2, "市场部");
55             ps.setString(3, "北京");
56             count += ps.executeUpdate(sql);
57             System.out.println(count);
58 
59             // 事务执行到此处,表示执行完成,应当手动提交
60             conn.commit();
61 
62         } catch (Exception e) {
63             //若在以上事务执行过程中发生异常,则回滚
64             if (conn != null) {
65                 try {
66                     conn.rollback();
67                 } catch (SQLException e1) {
68                     e1.printStackTrace();
69                 }
70             }
71             e.printStackTrace();
72         } finally {
73             // 关闭资源
74             if (conn != null) {
75                 try {
76                     conn.close();
77                 } catch (SQLException e) {
78                     e.printStackTrace();
79                 }
80             }
81             if (ps != null) {
82                 try {
83                     ps.close();
84                 } catch (SQLException e) {
85                     e.printStackTrace();
86                 }
87             }
88         }
89     }
90 }

 

posted @ 2018-03-09 01:21  Js_zero  阅读(852)  评论(0编辑  收藏  举报