JDBC中Transaction的实现

Transaction(交易)问题指的是在银行交易过程中,有两方以上的数据库要变动,这时候要求两方数据库同时做出改变。

mysql中默认commit方式为自动提交,因此实现这个问题的

第一步是调用Connection中的setAutoCommit(false)方法,将提交方式改为手动提交;

然后使用addBatch()方法,如果一方数据库执行出现错误,调用用callBack()方法,确保多方数据库同时变动

例:

 1 import java.sql.*;
 2
 3 public class TestTransaction {
 4
 5     public static void main(String[] args) {
 6         Statement stmt = null;
 7         Connection conn = null;
 8
 9         try {
10             Class.forName("com.mysql.jdbc.Driver");
11             conn = DriverManager.getConnection("jdbc:mysql://localhost/mydata?user=username&password=pw&useSSL=false");
12
13             conn.setAutoCommit(false);
14             stmt = conn.createStatement();
15             stmt.addBatch("insert into dept values (1, ‘A‘, ‘A‘)");
16             stmt.addBatch("insert into dept values (2, ‘B‘, ‘B‘)");
17             stmt.addBatch("insert into dept values (3, ‘C‘, ‘C‘)");
18             stmt.executeBatch();
19             conn.commit();
20             conn.setAutoCommit(true);
21         } catch (ClassNotFoundException e) {
22             e.printStackTrace();
23         } catch (SQLException e) {
24             e.printStackTrace();
25
26             try {
27                 if (conn != null) {
28                     conn.rollback();
29                     conn.setAutoCommit(true);
30                 }
31             } catch (SQLException e1) {
32                 e1.printStackTrace();
33             }
34
35         } finally {
36             try {
37                 if (stmt != null) {
38                     stmt.close();
39                 }
40                 if (conn != null) {
41                     conn.close();
42                 }
43             } catch (SQLException e) {
44                 e.printStackTrace();
45             }
46         }
47
48     }
49
50 }
时间: 2024-10-11 01:11:45

JDBC中Transaction的实现的相关文章

JDBC中的事务-Transaction

事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少100元,银行卡余额增加100元,而不是支付宝的100元被扣除,而银行卡的100元却没收到.也就是说,要么100元从支付宝扣除的同时银行卡也会多出一百元,要么这次提现失败支付宝的100元还在,银行卡也没有收到钱.支付宝扣钱和银行卡收钱,这两件事要么都成功要么都失败. 事物的ACID特性: 满足ACID

给出一个jdbc的transaction例子?

7.jdbc的transaction例子:(视频下载) (全部书籍)import java.sql.*; public class MySQlTransaction1 { public static void main(String[] args) throws SQLException {/*in my sql: create table Accounts(                ID int(4) not null,                NAME varchar(15), 

在JDBC中使用带参数的SQL语句

ADO.Net中,支持带参数的SQL语句,例如:Select * from Tables where [email protected],其中@column1为SQL参数,使用起来非常方便,而JDBC中没有找到此功能,感觉有点不便, 于是想自己实现一个.今天正好看见csdn中有一篇http://blog.csdn.net/wallimn/article/details/3734242 文章,有些感触,于是把自己的实现也写出来. 我的思路: 1: 在SQL语句中找到以@开始,以" ",

JDBC中PreparedStatement接口提供的execute、executeQuery和executeUpdate之间的区别及用法

JDBC中PreparedStatement接口提供的execute.executeQuery和executeUpdate之间的区别及用法 (2012-08-27 09:36:18) 转载▼ 标签: statement execute executequery executeupdate 杂谈 分类: DataBase区 PreparedStatement接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语

JDBC中常用对象介绍

JDBC中的主要类(接口) 在JDBC中常用的类有: 1.DriverManager 2.Connection 3.Statement 4.ResultSet 1.DriverManager 其实我们今后只需要会用DriverManager的getConnection( )方法即可: 1. Class.forName("com.mysql.jdbc.Driver");//注册驱动 2. String url = "jdbc:mysq  l://localhost:3306/m

开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

1.  子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A.  过程 - 执行某些操作 a.  创建过程的语法: CREATE [OR REPLACE]  PROCEDURE  <procedure name> [(<parameter list>)]  IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <excep

jdbc中PreparedStatement中in的用法

jdbc中sql不支持IN直接传入字符串,例如'0001','0002'等这样子的方法,所以需要根据传入参数的个数来构造?的个数 例如传入为一个数组或一个list  String[]{'0001','0002'} 那么构造的in 就为 in(?,?) 相对应的for循环数组长度来传入参数 for(in t index=0;index<xx.length;index++){ ps.setString(index,xx[index]); } 通过动态的构造sql语句和动态传值就能够实现类似于myba

使用JDBC中的出现的乱码和查询无结果问题

使用JDBC中的问题 连接的后出现查询结果是乱码. 1.可能是代码的编码与数据库的编码不同 ? 有可以将二者都设置为UTF-8 2.如果比较懒得话可以只设代码为UTF-8 mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用 添加的作用是:指定字符的编码.解码格式. ? 例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码.这时候如果添加了useUnicode=true&characterEncoding=UTF

jdbc中对mysql数据库操作的简单封装--(仅做备忘记录)

本次使用jdbc中的mysql-connector-java-5.1.47-bin.jar的连接包,下载这个jar包放在javaee项目的WEB-INF/lib目录下,再把它作为外包jar包进入到libraries中,这样就可以使用mysql的jdbc接口了. 自己封装的代码中引入了两个自己字义的Exception:SqlSecureException.java package com.myproweb.exception; public class SqlSecureException ext