1. Commit

Class UtiDb
Class BusPro
package JavaJDBC.Chap09.sec01;
import JavaJDBC.util.UtiDb;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* Created by linux_ccmj on 16-5-17.
*/
public class BusPro {
// UtiDb
private static UtiDb utiDb = new UtiDb();
// Out account fun
private static void outAccFun(Connection con, String accNam, int accNum) throws Exception{
// sql command string
String strComSql = "update t_account set accountBalance = accountBalance-? where accountName =?";
// prepared statement
PreparedStatement preSta = con.prepareStatement(strComSql);
preSta.setInt(1, accNum);
preSta.setString(2, accNam);
preSta.executeUpdate();
// close prepared statement
preSta.close();
}
// In account fun
private static void inAccFun(Connection con, String accNam, int accNum) throws Exception{
// sql command string
String strComSql = "update t_account set accountBalance = accountBalance+? where accountName =?";
// prepared statement
PreparedStatement preSta = con.prepareStatement(strComSql);
preSta.setInt(1, accNum);
preSta.setString(2, accNam);
preSta.executeUpdate();
// close prepared statement
preSta.close();
}
// Test main
public static void main(String[] args){
// Connection
Connection con = null;
try {
con = utiDb.getConFun();
con.setAutoCommit(false);
// Out and in fun
outAccFun(con, "张三", 500);
System.out.println("张三转出500");
inAccFun(con, "李四", 500);
System.out.println("李四转入500");
// Close connection
} catch (Exception e) {
try {
con.rollback();
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
finally {
try {
con.commit();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}


2. Save Point

Class UtiDb
Class BusPro_SetPoi
package JavaJDBC.Chap09.sec02;
import JavaJDBC.util.UtiDb;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Savepoint;
/**
* Created by linux_ccmj on 16-5-17.
*/
public class BusPro_SetPoi {
// UtiDb
private static UtiDb utiDb = new UtiDb();
// Out account fun
private static void outAccFun(Connection con, String accNam, int accNum) throws Exception{
// sql command string
String strComSql = "update t_account set accountBalance = accountBalance-? where accountName =?";
// prepared statement
PreparedStatement preSta = con.prepareStatement(strComSql);
preSta.setInt(1, accNum);
preSta.setString(2, accNam);
preSta.executeUpdate();
// close prepared statement
preSta.close();
}
// In account fun
private static void inAccFun(Connection con, String accNam, int accNum) throws Exception{
// sql command string
String strComSql = "update t_account set accountBalance = accountBalance+? where accountName =?";
// prepared statement
PreparedStatement preSta = con.prepareStatement(strComSql);
preSta.setInt(1, accNum);
preSta.setString(2, accNam);
preSta.executeUpdate();
// close prepared statement
preSta.close();
}
// Test main
public static void main(String[] args){
// Connection
Connection con = null;
Savepoint savPoi = null;
try {
con = utiDb.getConFun();
con.setAutoCommit(false);
// Out and in fun
outAccFun(con, "张三", 500);
savPoi=con.setSavepoint(); // Set save point
System.out.println("张三转出500");
inAccFun(con, "李四", 500);
System.out.println("李四转入500");
// Close connection
} catch (Exception e) {
try {
con.rollback(savPoi); // If there is exception, it roll back at save point
} catch (Exception e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
finally {
try {
con.commit();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}


转账业务中的事务管理
本文通过两个Java类的实现,展示了如何使用Java JDBC进行转账业务的处理,包括使用commit和savepoint来确保事务的完整性和一致性。具体实现了转账功能,并在出现异常时回滚到上一个保存点。
2543

被折叠的 条评论
为什么被折叠?



