实现JDBC事务+存储过程

这是个案例

//定义需要用到的几个变量

1     Connection mconn = null;
2     CallableStatement mstmt = null;
3     ResultSet mrs = null;



 

 1     String result = "";10       
11       try {
12           //1 链接数据库
13           String mdriver = PropertiesLoader.getPropertiesVal(连接driver,数据库名称);
14           String murl = PropertiesLoader.getPropertiesVal(数据库链接);
15           String musername = PropertiesLoader.getPropertiesVal(用户名);
16           String mpassword = PropertiesLoader.getPropertiesVal(密码);  
17           
18           Class.forName(mdriver);     
19           mconn = DriverManager.getConnection(murl, musername, mpassword);
20           
21           //2.关闭自动提交
22           mconn.setAutoCommit(false);
23      
24         //3.存储过程1
25           mstmt = mconn.prepareCall("{call 存储过程名(?,?,?,?,?,?,?,?)}");
26         //3.1.存储过程1赋参
27           mstmt.setObject(1, 参数1);
28           mstmt.setObject(2, 参数2);
29           mstmt.setObject(3, 参数3);
30           mstmt.setObject(4, 参数4);
31           mstmt.setObject(5, 参数5);
32           mstmt.setObject(6, 参数6);
33           mstmt.setObject(7, "");
34           mstmt.setObject(8, "");
35           mstmt.registerOutParameter(7, java.sql.Types.VARCHAR);//参数7为输出参数
36           mstmt.registerOutParameter(8, java.sql.Types.VARCHAR);//参数8为输出参数
37           
38           //3.2.执行存储过程
39           mstmt.executeUpdate();
40           
41           //3.3.取结果值43           result = mstmt.getObject(8).toString();
44           String[] resArray = result.split("\\|");
45           if("0".equals(resArray[0])){//3.4 如果执行失败了就回滚,并返回失败结果
46                mconn.rollback();  
47                return result;
48           }53           
54           //4.存储过程2
55           stmt = mconn.prepareCall("{call 存储过程名(?,?,?,?,?,?,?,?,?,?,?)}");
56           stmt.setObject(1, 参数1);
57           stmt.setObject(2, 参数2);
58           stmt.setObject(3, 参数3);
59           stmt.setObject(4, 参数4);
60           stmt.setObject(5, 参数5);
61           stmt.setObject(6,参数6);
62           stmt.setObject(7, 参数7);
63           stmt.setObject(8, 参数8);
64           stmt.setObject(9,"");
65           stmt.setObject(10, 参数10);
66           stmt.setObject(11, 参数11);
67 
68           stmt.registerOutParameter(9, java.sql.Types.VARCHAR);//第九个参数为输出值
69           stmt.executeUpdate();//提交
70           result = stmt.getObject(9).toString();
71           resArray = result.split("\\|");
72           if("0".equals(resArray[0])){//如果执行失败了就回滚,并返回失败结果
73                mconn.rollback();  
74                return result;
75           }
76           stmt.close();
77           mconn.commit();
78           
79      }catch(SQLException e){//如果捕捉到异常,就回滚+打印+返回错误结果
80           mconn.rollback();  
81           e.printStackTrace();
82           return  "0|服务器异常,请稍后再试!";
83       } finally {//最终打开自动提交,释放资源
84           mconn.setAutoCommit(true);
85           replease(mconn, mstmt, mrs);//mconn:释放连接 mstmt:释放命名参数处理对象  mrs:释放结果集对象
86       }
87       return "结果";

 

上一篇:Statement 执行多条语句,使用批量执行


下一篇:利用预编译来SQL注入