1. 程式人生 > >JTA的使用與理解

JTA的使用與理解

amount 分布 open record tom main lose where 屬性

1.介紹

  事物的ACID。

  事務是計算機應用中不可或缺的組件模型,它保證了用戶操作的原子性 ( Atomicity )、一致性 ( Consistency )、隔離性 ( Isolation ) 和持久性 ( Durabilily )。

  操作必須保正 ACID 的事務屬性:即要麽全部成功,要麽全部失敗

2.本地事物

  緊密依賴於底層資源管理器(例如數據庫連接 ),事務處理局限在當前事務資源內。

  此種事務處理方式不存在對應用服務器的依賴,因而部署靈活卻無法支持多數據源的分布式事務。

3.數據庫連接中使用本地事務

技術分享
 1 package Local;
 2 
 3 import
java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.PreparedStatement; 6 import java.sql.ResultSet; 7 import java.sql.SQLException; 8 import java.sql.Statement; 9 10 public class LocalTractionTest { 11 12 public static void main(String[] args) { 13 traction();
14 } 15 public static void traction() { 16 Connection connection=null; 17 Statement statement=null; 18 PreparedStatement preparedStatement=null; 19 ResultSet resultSet=null; 20 try { 21 String driverClass="com.mysql.jdbc.Driver"; 22 String url="jdbc:mysql://localhost:3306/test";
23 String user="root"; 24 String password="123456"; 25 Class.forName(driverClass); 26 connection=DriverManager.getConnection(url, user, password); 27 connection.setAutoCommit(false); 28 statement=connection.createStatement(); 29 //原始數據 30 String sql="SELECT * FROM t_account"; 31 preparedStatement=connection.prepareStatement(sql); 32 resultSet=preparedStatement.executeQuery(); 33 while(resultSet.next()) { 34 String id=resultSet.getString(1); 35 String amount=resultSet.getString(2); 36 System.out.println(id+"......."+amount); 37 } 38 //操作 39 // 將 A 賬戶中的金額減少¥ 500 40 String sql1="update t_account set amount = amount - 500 where account_id = ‘A‘"; 41 statement.execute(sql1); 42 // 將 B 賬戶中的金額增加¥ 500 43 String sql2="update t_account set amount = amount + 500 where account_id = ‘B‘"; 44 statement.execute(sql2); 45 // 提交 46 connection.commit(); 47 //新的數據 48 preparedStatement=connection.prepareStatement(sql); 49 resultSet=preparedStatement.executeQuery(); 50 while(resultSet.next()) { 51 String id=resultSet.getString(1); 52 String amount=resultSet.getString(2); 53 System.out.println(id+"......."+amount); 54 } 55 }catch(ClassNotFoundException e1) { 56 e1.getMessage(); 57 }catch(SQLException e2) { 58 try { 59 connection.rollback(); 60 connection.close(); 61 statement.close(); 62 } catch (SQLException e3) { 63 e3.printStackTrace(); 64 } 65 e2.printStackTrace(); 66 } 67 } 68 69 }
View Code

4.效果

  技術分享

5.sql語句

 1 SET FOREIGN_KEY_CHECKS=0;
 2 
 3 -- ----------------------------
 4 -- Table structure for t_account
 5 -- ----------------------------
 6 DROP TABLE IF EXISTS `t_account`;
 7 CREATE TABLE `t_account`(
 8   `account_id` varchar(64) NOT NULL,
 9   `amount` int(64) DEFAULT NULL,
10   PRIMARY KEY (`account_id`)
11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
12 
13 -- ----------------------------
14 -- Records of t_account
15 -- ----------------------------
16 INSERT INTO `t_account` VALUES (A, 500);
17 INSERT INTO `t_account` VALUES (B, 1500);

JTA的使用與理解