spring jdbctemplate调用存储过程

来源:V型知识库 2020年06月12日 22:01 浏览:93

JdbcTemplate调用Oracle存储过程

一、有返回值的存储过程(结果集) 

java测试代码:

public void test() {   
  List resultList = (List) jdbcTemplate.execute(   
     new CallableStatementCreator() {   
        public CallableStatement createCallableStatement(Connection con) throws SQLException {   
           String storedProc = "{call testpro(?,?)}";// 调用的sql   
           CallableStatement cs = con.prepareCall(storedProc);   
           cs.setString(1, "p1");// 设置输入参数的值   
           cs.registerOutParameter(2, OracleTypes.CURSOR);// 注册输出参数的类型   
           return cs;   
        }   
     }, new CallableStatementCallback() {   
        public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException {   
           List resultsMap = new ArrayList();   
           cs.execute();   
           ResultSet rs = (ResultSet) cs.getObject(2);// 获取游标一行的值   
           while (rs.next()) {// 转换每行的返回值到Map中   
              Map rowMap = new HashMap();   
              rowMap.put("id", rs.getString("id"));   
              rowMap.put("name", rs.getString("name"));   
              resultsMap.add(rowMap);   
           }   
           rs.close();   
           return resultsMap;   
        }   
  });   
  for (int i = 0; i < resultList.size(); i++) {   
     Map rowMap = (Map) resultList.get(i);   
     String id = rowMap.get("id").toString();   
     String name = rowMap.get("name").toString();   
     System.out.println("id=" + id + ";name=" + name);   
  }   
}


二、无返回值的存储过程调用:

public class JdbcTemplateTest { 
  private JdbcTemplate jdbcTemplate; 
  public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { 
  this.jdbcTemplate = jdbcTemplate; 
  } 
  public void test(){ 
     this.jdbcTemplate.execute("call testpro('p1','p2')"); 
  } 
}


三、有返回值的存储过程(非结果集)

public void test() { 
  String param2Value = (String) jdbcTemplate.execute( 
     new CallableStatementCreator() { 
        public CallableStatement createCallableStatement(Connection con) throws SQLException { 
           String storedProc = "{call testpro(?,?)}";// 调用的sql 
           CallableStatement cs = con.prepareCall(storedProc); 
           cs.setString(1, "p1");// 设置输入参数的值 
           cs.registerOutParameter(2, OracleTypes.VARCHAR);// 注册输出参数的类型 
           return cs; 
        } 
     }, new CallableStatementCallback() { 
         public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException { 
           cs.execute(); 
           return cs.getString(2);// 获取输出参数的值 
     } 
  }); 
}


上一篇:  Class 的继承