JDBC编程的事务处理

简介:

一、事务的基本概念

    数据库是一个多用户使用的共享资源。当多个用户并发地存取数据的时候,在数据库中就会产生多个用户同时存取同一数据的情况。若对并发操作不加控制,就可能会产生读取和存储不正确的数据,破坏数据的一致性。

    而事务是并发控制的基本单位。所谓事务,即一个操作序列。这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。比如银行转账工作:从一个账户扣款,并使用另一个账户收款,这两个操作要么都执行,要么都不执行,因此应该把它们看作是一个事务。

    事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据的一致性。

    对于编程人员来说,可以把数据库事务看作是一组sql语句,这组sql语句是一个逻辑工作单元,它们是不可分割的,它们的执行结果应该作为一个整体永久修改一个数据库的内容或者作为一个整体取消对数据库的修改。

    

二、事务的四个基本特征

    1.原子性

    原子性是指事务中包含的操作都被看作是一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。这也意味着事务中的所有元素作为一个整体提交或回滚。事务的所有元素是不可分割的,是一个完整的操作。

    2.一致性

    一致性是指事务开始之前和事务结束以后数据库都处于一致性状态,数据库的完整性约束没有被破坏。

     3.隔离性

    隔离性是指对数据库进行修改的多个事务是彼此隔离的。这说明事务必须是独立的,不应该以任何形式影响其他事务

    4.持久性

    持久性是指事务完成之后对于数据库的影响是永久的,该修改真实地修改了数据库,即使数据库出现故障也会一直保留。


三、与SQL相关的事务语句

    开始事务:BEGIN TRANSACTION

    提交事务:COMMIT TRANSATION

    回滚事务:ROLLBACK TRANSATION    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package  com.eduask.jdbc;
 
import  java.sql.Connection;
import  java.sql.DriverManager;
import  java.sql.SQLException;
import  java.sql.Statement;
 
/*将要测试的逻辑
   保存一个用户Tom的基本信息和Tom的地址信息
   分别通过两个java方法插入到用户表和地址表中 
   在插入地址表的时候人为造成一个异常
   观察结果
  */
public  class  TransactionTest {
     
     //创建一个getConnection()用来获取数据库的连接
     public  static  Connection getConnection(){
         Connection conn =  null ;
         
         try  {
             Class.forName( "com.mysql.jdbc.Driver" );
             conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/testdemo" , "root" , "root" );
         catch  (Exception e) {
             e.printStackTrace();
         }
         
         return  conn;
     }
     
     public  static  void  insertUserData(Connection conn)  throws  SQLException{
             String sql =  "insert into tbl_user(id,name,password,email) "
                     "values(10,'Tom','123456','tom@gmail.com')" ;
             Statement st = conn.createStatement();
             int  count = st.executeUpdate(sql);
             System.out.println( "向用户插入了 " + count +  " 条记录" );
     }
     
     public  static  void  insertAddressData(Connection conn)  throws  SQLException{
             String sql =  "insert into tbl_address(id,city,country,user_id) "
                     "values(1,'ShangHai','China','10')" ;
             Statement st = conn.createStatement();
             int  count = st.executeUpdate(sql);
             System.out.println( "向地址表中插入了 " + count +  " 条记录" );
     }
     
     public  static  void  main(String[] args) {
         Connection conn =  null ;
         try  {
             conn = getConnection();
             conn.setAutoCommit( false );
             
             insertUserData(conn);
             insertAddressData(conn);
             
             conn.commit();
         catch  (SQLException e) {
             System.out.println( "=========捕获到SQL异常=========" );
             
             e.printStackTrace();
             try  {
                 conn.rollback(); //回滚事务,保证数据库数据的一致性
                 System.out.println( "=========事务回滚成功=========" );
             catch  (Exception e2) {
                 e2.printStackTrace();
             }
         } finally {
             try  {
                 if  (conn !=  null ) {
                     conn.close();
                 }
             catch  (Exception e3) {
                 e3.printStackTrace();
             }
         }
     }
     
     
}





本文转自yeleven 51CTO博客,原文链接:http://blog.51cto.com/11317783/1784316



相关文章
|
3月前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
4月前
|
SQL Java 关系型数据库
Java中的JDBC编程详解
Java中的JDBC编程详解
|
4月前
|
SQL Java 关系型数据库
Java中的JDBC编程详解
Java中的JDBC编程详解
|
5月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
72 3
|
6月前
|
SQL Java 关系型数据库
Java之JDBC数据库编程
Java之JDBC数据库编程
40 2
|
6月前
|
SQL Java 关系型数据库
JDBC编程
JDBC编程
49 2
|
6月前
|
SQL Java 数据库连接
从零开启 JDBC 编程
从零开启 JDBC 编程
|
6月前
|
SQL Java 数据库连接
JDBC编程相关知识(实现图书管理系统进阶版)(下)
JDBC编程相关知识(实现图书管理系统进阶版)
41 0
|
6月前
|
Java 关系型数据库 MySQL
JDBC编程相关知识(实现图书管理系统进阶版)(上)
JDBC编程相关知识(实现图书管理系统进阶版)
64 0
|
6月前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互