簡體   English   中英

如何使用JdbcTemplate在spring mvc中對存儲過程或函數進行簡單調用

[英]How to make a simple call to a stored procedure or function in spring mvc using JdbcTemplate

我已經閱讀了很多關於如何使用JdbcTemplate調用存儲過程的問題,有很多方法比如使用beanMapper,創建一個rowMapper,使用callableStatement,但是我看到很多人這樣說:

對於簡單的過程,您可以使用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不是null

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);

使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM