如何使用JdbcTemplate在spring mvc中对存储过程或函数进行简单调用

时间:2015-03-06 19:42:30

标签: java spring spring-mvc stored-procedures jdbctemplate

我已经阅读了很多关于如何使用JdbcTemplate调用存储过程的问题,有很多方法,比如使用beanMapper,使用callableStatement创建一个rowMapper,但是我看到很多人都这么说: / p>

  

对于简单的过程,您可以使用jdbcTemplate的更新方法:

jdbcTemplate.update("call SOME_PROC (?, ?)", param1, param2);

我试过这样做,我的jdbcTemplate变量总是为null,这是我的存储过程

CREATE OR REPLACE PROCEDURE addProce
    (
       num1 IN number,
       num2 IN number,
       result OUT number
    )
IS
BEGIN
    result := num1 + num2;

END;
/

这是我称之为的课程

public class UsuerDAOImpl implements UserDAO {

    private JdbcTemplate jdbcTemplate;

    public UsuerDAOImpl () {}

    public UsuerDAOImpl (DataSource datasource) {
        this.jdbcTemplate  =  new JdbcTemplate(datasource);
    }

     public int addmethodJdbc() 
     {
        int result= 0;
         int someValue= jdbcTemplate.update("addProce(?, ?, ?)", 2, 1, result);

        return someValue;
    }
}

我的课程中有这个方法,而且我的jdbctemplate在那里不是空的

public void insertUser(User user) {

    try {
        String sql = "INSERT INTO USER"
                + "(a, b, c, d)"
                + " VALUES (?, ?, ?, ?)";

        jdbcTemplate.update(sql, user.getA(),
                usaurio.getB(),
                usaurio.getC(),
                usaurio.getD());
    } 
    catch (DataAccessException dataAccessException) 
    {

        dataAccessException.printStackTrace();
    }
    catch(Exception e) 
    {

        e.printStackTrace();
    }
}   

我也尝试使用函数:

CREATE OR REPLACE FUNCTION addFunct
    (
       num1 IN number,
       num2 IN number
    )
    return number
IS
resultado number;
BEGIN
    result := num1 + num2;
    return (result);
END;
/

但仍然无效我的jdbcTemplate也是null

我已经知道如何用其他方式调用它们,但我想知道如何以这种简单的方式调用它们

jdbcTemplate.update("call SOME_PROC (?, ?)", param1, param2);

1 个答案:

答案 0 :(得分:0)

使用SimpleJdbcCall#withProcedureName()来调用存储过程。将存储过程的名称作为参数传递。

例如你的方法:

public int addmethodJdbc() {
   SimpleJdbcCall jdbcCall =  new SimpleJdbcCall(jdbcTemplate).withProcedureName("addFunct");
   SqlParameterSource in = new MapSqlParameterSource().addValue("num1", 2).addValue("num2", 1);

   Map<String, Object> out = jdbcCall.execute(in)
   int result = (Integer)out.get("result");
   return result;
}