项目中需要用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();前面还是后面,你测试一下吧
------解决方案--------------------
------解决方案--------------------
--你这是在数据库中调试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'