使用spring JdbcTemplate均不用手动关闭连接
//JdbcTemplate 执行存储过程,不含事物。
ComboPooledDataSource ds = (ComboPooledDataSource )res.get("ds"); //连接池获取
JdbcTemplate jt = new JdbcTemplate(ds);
String param2Value = jt.execute(
new CallableStatementCreator() {
public CallableStatement createCallableStatement(Connection connection) throws SQLException {
String storedProc = "{call RL.TESTPROC(?,?,?)}";// 调用的sql
CallableStatement cs = connection.prepareCall(storedProc);
//cs.setString(1, "p1");// 设置输入参数的值
cs.registerOutParameter(1, Types.INTEGER);
cs.registerOutParameter(2, Types.VARCHAR);// 注册输出参数的类型
cs.registerOutParameter(3, Types.VARCHAR);
return cs;
}
}, new CallableStatementCallback<String>() {
public String doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
cs.execute();
String t1 = cs.getString(1);
String t2 = cs.getString(2);
String t3 = cs.getString(3);
return cs.getString(2);// 获取输出参数的值
}
});
//JdbcTemplate 执行存储过程包含事物,回滚
ComboPooledDataSource ds = (ComboPooledDataSource )res.get("ds"); //连接池获取
TransactionDefinition def = new DefaultTransactionDefinition();
DataSourceTransactionManager transactionManager=new DataSourceTransactionManager(ds);
TransactionStatus status = transactionManager.getTransaction(def);
JdbcTemplate jt = new JdbcTemplate(ds);
try {
String updstr=" INSERT INTO RL.FHDK_PARM_USR "
+ " VALUES( 'TTTTS',9 ) ";
jt.update(updstr);
int param2Value = jt.execute(
new CallableStatementCreator() {
public CallableStatement createCallableStatement(Connection connection) throws SQLException {
String storedProc = "{call RL.TESTPROC(?,?,?)}";// 调用的sql
CallableStatement cs = connection.prepareCall(storedProc);
//cs.setString(1, "p1");// 设置输入参数的值
cs.registerOutParameter(1, Types.INTEGER);
cs.registerOutParameter(2, Types.VARCHAR);// 注册输出参数的类型
cs.registerOutParameter(3, Types.VARCHAR);
return cs;
}
}, new CallableStatementCallback<Integer>() {
public Integer doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
cs.execute();
int t1 = cs.getInt(1);
String t2 = cs.getString(2);
String t3 = cs.getString(3);
return t1;// 获取输出参数的值
}
});
if(param2Value==-1){
throw new Exception("执行过程失败!");
}
transactionManager.commit(status);
}catch(Exception e){
transactionManager.rollback(status);
System.out.println(e.getMessage());
}