在做的项目中,有一个基金产品的购买交易,里面的大致逻辑是 先判断用户是否基金开户,未开户发交易开基金账户>是否签约***(具体什么省略) 未签约发交易签约>最后一步发交易购买该款基金产品。 但现在的问题是购买失败则一个java类里的前两个交易都给做了现在,想不出什么类似操作数据库的事务回滚机制才控制这段交易,该交易在一个页面完成。望经验丰富的朋友给个思路,谢谢!
你可以使用应用层的事务框架,或者自己实现一个简单的:先将操作放入临时的表中,然后一次性操作。
事务实例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class RunInsert {
/**
* @param args
*/
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// 动态导入数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库链接
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/jdbc_teaching", "root", "");
// 开启事务
conn.setAutoCommit( false );
// 创造SQL语句
String sql = "INSERT INTO user_list ( user_name, user_password ) VALUES ( 'Eric', '123' )";
// 执行SQL语句
stmt = conn.createStatement();
stmt.executeUpdate(sql);
// 提交事务
conn.commit();
System.out.println( "OK!" );
} catch (Exception e) {
e.printStackTrace();
// 回滚事务
try {
conn.rollback();
} catch ( Exception e2 ) {}
} finally {
// 关闭Statement
try {
stmt.close();
} catch (Exception e) {}
// 关闭Connection
try {
conn.close();
} catch (Exception e) {}
}
}
}
事务回滚,看一下就知道了,黑马有一个课程就是说回滚事件,有空去看看!
这位兄弟应该是做电商的开发员,如果是在逻辑控制上(不局限于数据库操作的话),事务控制需要有一个规则。
首先定义BankTansaction接口,如:
public interface BankTransaction {
public void openTransaction() throws Exception;//打开事务
public void commitTransaction() throws Exception;//提交事务
public void rollbackTransaction() throws Exception;//回滚事务
}
乍一看,貌似数据库管理方式,其实是针对你所有业务程序的,只有用户确认了,再确认了,才发起一致请求。当然和用户的确认过程不是一个界面交互能做完的,只能使用数据库中间表,或cookie,session。
另外你应该写2个队列,是你的程序与银行接口之间的,一个专门处理发送交易,一个专门处理银行回执交易。每个用户发起的电商交易以工单方式下行操作,一步一步来,数据库工单表创建的合理点就好。
希望这个回答能帮得上你的忙。