2013-10-18 43 views
2

調用表值函數我想用彈簧稱這種說法JDBC怎麼辦呢如何從春天JDBC

select* from cdc.fn_cdc_get_all_changes_dbo_Student(@from_lsn,@to_lsn,@row_filter_option); 

我應該使用JDBCTemplate類或SimpleJdbcCall類。

我試過,但它並沒有工作:

jdbcTemplate.setResultsMapCaseInsensitive(true); 
     SimpleJdbcCall mysimpleJdbcCall = new SimpleJdbcCall(jdbcTemplate); 

     mysimpleJdbcCall.withSchemaName("cdc") 
        .withProcedureName("fn_cdc_get_all_changes_dbo_student").returningResultSet("students", 
          new RowMapper<Student>() 
        { 

         @Override 
         public Student mapRow(ResultSet rs, int rowNum) throws SQLException 
         { 
         Student s = new Student(); 
         s.setId(rs.getInt(5)); 
         s.setName(rs.getString(6)); 
         s.setAge(rs.getInt(7)); 
         return s; 
         } 
        }); 

     MapSqlParameterSource paramSource =new MapSqlParameterSource(); 
    // paramSource.addValue("capture_instance", "dbo_student"); 
    paramSource.addValue("from_lsn", lsn1); 
    paramSource.addValue("to_lsn", lsn2); 
    paramSource.addValue("row_filter_option","all"); 
    paramSource.addValue("TABLE_RETURN_VALUE", null); 
    /* ResultSet rs = mysimpleJdbcCall.executeFunction(ResultSet.class, paramSource); 
    return null;*/ 
    Map m = mysimpleJdbcCall.execute(paramSource); 
    List<Student> s= (List)m.get("students"); 
    return s; 

回答

1

而不是通過存儲過程的方式去的,表值函數應該直接調用我們稱之爲查詢的方式。

我想通了,這樣說:

String sql = "select* from cdc.fn_cdc_get_all_changes_" + tableName + "(:from_lsn ,  :tos_lsn , :row_filter_option)"; 

MapSqlParameterSource params = new MapSqlParameterSource(); 
    params.addValue("from_lsn" , lsn1); 
params.addValue("tos_lsn", lsn2); 
params.addValue("row_filter_option", "all"); 

List<Student>s = namedParameterJdbcTemplate.query(sql, params, new RowMapper<Student>() 
     { 

     @Override 
     public Student mapRow(ResultSet rs, int rowNo) throws SQLException 
     { 
      Student s = new Student(); 
      s.setId(rs.getInt(5)); 
      s.setName(rs.getString(6)); 
      s.setAge(rs.getInt(7)); 
      return s; 
     } 
     }); 
return s;