请高手帮我看看,我写的存储过程有什么问题,为什么总是得不到值啊。我想通过调用存储过程得到@BH的值
存储过程:
create procedure procddd
@BH char(10) OUTPUT
AS
declare @BH1 char(10)
declare @TODAY char(6)
begin
select @TODAY=right(convert(char(8),getdate(),112),6)
select @BH1=BH from SEED 
if @BH1 is null or left(@BH1,6)<>@TODAY
begin
select @BH1=@TODAY+'0000'
end
select @BH1=left(@BH1,6)+right('0000' + ltrim(convert(char(4),convert(int,right(@BH1,4)))+1),4)
update seed set BH=@BH1 
SET @BH=@BH1
return @BH
end调用程序:import java.util.*;
public class Hello {
  public static void main(String[] args)throws Exception {
    try{
      Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
      System.out.println("成功连接");
     Connection con=DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev","bn","bn");
    java.sql.CallableStatement sqlstmt=con.prepareCall("{?=call procddd()}");
    sqlstmt.registerOutParameter(1, java.sql.Types.CHAR);//注册输出参数
    String str= sqlstmt.getString(1);//获取输出值    }catch(Exception e)
    {e.printStackTrace();
    }
  }
}下面是程序报的错误:
java.sql.SQLException: [Microsoft][SQLServer JDBC Driver]The requested data is not available.
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseData.convert(Unknown Source)
at com.microsoft.jdbc.base.BaseData.getData(Unknown Source)
at com.microsoft.jdbc.base.BaseCallableStatement.getString(Unknown Source)
at Hello.main(Hello.java:12)

解决方案 »

  1.   

    stmt = conn.prepareCall("{call ? := procddd(?)}");
    试下行不行
      

  2.   

    注册两个参数,一个是存储过程的返回值,一个是output参数。虽然说他们两个是同一值。
      

  3.   

    java.sql.CallableStatement sqlstmt=con.prepareCall("{call procddd(?)}");
      

  4.   

    stmt = conn.prepareCall("{call ? := procddd(?)}");
    这样写也是不行。注册两个参数也不行啊。郁闷ing
      

  5.   

    晕倒。你的代码根本没有执行存储过程的调用阿。
    加一句话sqlstmt.execute();
      

  6.   

    java.sql.CallableStatement sqlstmt=con.prepareCall("{?=call procddd(?)}");
        sqlstmt.registerOutParameter(1, java.sql.Types.CHAR);//注册输出参数
        sqlstmt.registerOutParameter(2, java.sql.Types.CHAR);//注册输出参数
        sqlstmt.execute();
        String str= sqlstmt.getString(1);//获取输出值