【问题标题】:how i get a value from a return statement of sqlserver stored procedure to java?我如何从 sqlserver 存储过程的返回语句中获取值到 java?
【发布时间】:2018-05-17 11:36:33
【问题描述】:

我正在尝试进入一个名为 valorReturn 在我的 sql server 存储过程中返回语句的变量... sqlserver存储过程工作正常,但问题是java..

create procedure login
@cliente varchar(10),@pw varchar(10)
as begin
if exists(select cliente from seg where cliente=@cliente)
begin
if(select pw from seg where cliente=@cliente)=@pw
begin
   if(select privilegio from seg where cliente=@cliente)=0 begin
print 0
return 0
end
end

exec 'xd','xd'

在这里,我从 PRINT 行收到一条消息: 0

所以,我应该能够使用此 JAVA 代码获取该值并将其设置为变量 valorReturn

String consulta="exec login '"+usr+"','"+pw+"'";
CallableStatement st=con.prepareCall(consulta);
st.setInt(1,10);
st.registerOutParameter(1, Types.INTEGER);
st.execute();
int valorReturn=st.getInt(1);

这是控制台中打印的异常

com.microsoft.sqlserver.jdbc.SQLServerException:索引 1 超出范围。

谢谢,感谢您的帮助! :)

【问题讨论】:

    标签: java sql-server tsql stored-procedures return-value


    【解决方案1】:

    SQL 需要提供一个输出参数来绑定。

    SQL:

    create procedure login
        @cliente varchar(10), @pw varchar(10), @result INT = -1 OUTPUT
        as begin
        if exists(select cliente from seg where cliente=@cliente)
        begin
        if(select pw from seg where cliente=@cliente)=@pw
            begin
            if(select privilegio from seg where cliente=@cliente)=0 begin
            print 0
            SET @result = 0 -- new parameter
           return 0
        end
    end
    

    Java:

        String consulta="exec login ?,?,?"; //moved out to parameters to avoid SQL injection.
        CallableStatement st= con.prepareCall(consulta);
        st.setString(1,usr);
        st.setString(2,pw);
        st.registerOutParameter(3, Types.INTEGER);
        st.execute();
        int valorReturn=st.getInt(3);
    

    更多信息请访问https://docs.microsoft.com/en-us/sql/connect/jdbc/using-a-stored-procedure-with-output-parameters

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2020-07-14
      • 2013-01-22
      • 1970-01-01
      相关资源
      最近更新 更多