当前位置: 代码迷 >> Sql Server >> 请问一个jdbc调用存储过程的有关问题?
  详细解决方案

请问一个jdbc调用存储过程的有关问题?

热度:33   发布时间:2016-04-27 10:44:53.0
请教一个jdbc调用存储过程的问题??
项目中需要用jdbc调用存储过程,存储过程是第三方提供的,现在只知道这个存储过程会返回一个字符串。以前没接触过存储过程,看的有些晕,现在任务有些急,请教各位。
第三方提供的存储过程:
SQL code
DECLARE @return_value int,@o_bool varchar(1) EXEC @return_value = [dbo].[p_check_workday] @i_empno = N'$empno$' @i_workdt = N'$sdate$',@o_bool = @o_bool OUTPUT SELECT @o_bool as [email protected]_bool'

请问:用jdbc如何调用这个存储过程并得到返回值呢?
参考网上写的jdbc调用存储过程方法:
Java code
public void callProcedure(Connection conn, String procedure_name,    List<Object> list) throws Exception {    CallableStatement cast = null;    StringBuffer strb = new StringBuffer();    strb.append("{call " + procedure_name + "(");    if (null != list) {        int listSize = list.size();        for (int i = 0; i < listSize; i++) {            if (i == listSize - 1) {                strb.append("?");            } else {                strb.append("?,");            }        }    }    strb.append(")}");    cast = conn.prepareCall(strb.toString());    for (int i = 0; i < list.size(); i++) {        cast.setString(i + 1, list.get(i).toString());    }    cast.executeUpdate();    conn.commit();    cast.close();    }List list = new ArrayList();list.add("empno");//第一个参数list.add("sdate");//第二个参数callProcedure("[dbo].[p_check_workday]",list);


------解决方案--------------------
你从网上找的这段代码只能调用没有返回值的存储过程
cast = conn.prepareCall(strb.toString());
之后添加
cast.registerOutParameter(1, java.sql.Types.VARCHAR);
这样就设置了输出的参数了,我这里的输出参数是VARCHAR类型的
cast.executeUpdate();
后面添加
outParamter = cast.getString(1);这个就是输出的信息了,
添加的这行 我不确定是在conn.commit();前面还是后面,你测试一下吧
------解决方案--------------------
探讨

1.输入参数是不是$empno$和$sdate$
[email protected]_bool还是return_value?输出参数是怎么得到的,是通过 @return_value =...得到还是通过 SELECT @o_bool as [email protected]_bool'得到的?

------解决方案--------------------
--你这是在数据库中调试SP的例子
--调整下样式,这样看的容易理解
DECLARE @return_value int,@o_bool varchar(1) 

EXEC @return_value = [dbo].[p_check_workday] @i_empno = N'$empno$' @i_workdt = N'$sdate$',@o_bool = @o_bool OUTPUT 

[email protected]_bool显示执行结果
SELECT @o_bool as [email protected]_bool'

  相关解决方案