1

У меня есть хранимая процедура, которая должна возвращать код. PFB - образец SP.SP не возвращает результаты

USE [TEST] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[test_sp] 
    -- Add the parameters for the stored procedure here 
    @id int, 
    @name varchar(25), 
    @return_code int OUTPUT 
AS 
BEGIN 
    select @return_code=1 
    return @return_code 
END 

Java класс, где этот SP вызывается:

public int callSP() { 

     Connection con = getConnection(); 
     ResultSet rs = null; 
     CallableStatement ct = null; 
     int returnCode = -1; 
     try { 
      ct = con.prepareCall("{call test_sp (?,?,?)}"); 
      ct.setInt(1, 1); 
      ct.setString(2, "divya"); 
      ct.registerOutParameter(3, java.sql.Types.INTEGER); 

      ct.executeQuery(); 

      returnCode = ct.getInt(3); 

      if (returnCode == 0) { 
       System.out.println("Success"); 
      } 
     } catch (Exception ex) { 
       ex.printStackTrace(); 
     } finally { 
      database.close(rs, ct, con); 
     } 
     return returnCode; 
    } 

я получаю исключение во время выполнения этого. Исключение происходит на ct.executeQuery(); и говорит, что,

com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set. 

Может кто-нибудь помочь мне?

+0

Попробуйте установить NOCOUNT ON в начале вашего SP: 'SET NOCOUNT ON' –

+0

Пробовал это. Еще одна проблема. –

+0

В этом SP нет результатов. –

ответ

1

Попробуйте поместить возвращаемый параметр в качестве скалярного результата вызова, например:

ct = con.prepareCall("{? = call test_sp (?,?)}"); 
    ct.registerOutParameter(1, java.sql.Types.INTEGER); 
    ct.setInt(2, 1); 
    ct.setString(3, "divya"); 
    ct.execute(); 

    returnCode = ct.getInt(1); 

Некоторые смежные вопросы здесь:

Getting the Return Value from JDBC MSSQL

How to call scalar function from JDBC