首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-10-18 
请教一个jdbc调用存储过程的问题??项目中需要用jdbc调用存储过程,存储过程是第三方提供的,现在只知道这个

请教一个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 N'@o_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$
2.输出参数是@o_bool还是return_value?输出参数是怎么得到的,是通过 @return_value =...得到还是通过 SELECT @o_bool as N'@o_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 

--让出参用列名@o_bool显示执行结果
SELECT @o_bool as N'@o_bool'

热点排行