jdbc sql错误:语句没有返回结果集

时间:2014-06-26 11:10:12

标签: sql-server stored-procedures jdbc

我有两个存储过程如下:

create stored procedure p1
as
    select * from table1 where datediff(day, table1.[date], getdate())

create stored procedure p2
as
   declare @t1 table(
     ref varchar(20)
   )
      insert into @t1 select * from table1 where ref = 'some ref'
      declare @t2 table(
      fname varchar(20),
      lname varchar(20),
      email varchar(1000)
  )
  declare @len int = (select count(ref) from @t1)
  while @len > 0
  begin
  declare @value varchar(20)  = (select top 1 ref from @t1)
  insert into @t2 select * from table2 where ref = @ref
  delete from @t1
  where ref = @value
  set @len = (select count(ref) from @t1)
  end
  select * from @t2

Java代码

 ....
 String query = "Execute [p2]";

 try(CallableStatement cstmt = conn.prepareCall(query);
     ResultSet rs = cstmt.executeQuery()){
        ... some code
    }

表变量@ t1保存表格' table1'

中的选择结果

变量@len保存@ t1

中的行数

在while循环中使用@len > 0作为条件,我想从另一个表格中选择记录' table2'表变量@ t2保存来自' table2'

的选择记录

delete语句从@ t1中删除值 @len在@ t1中设置为新的行数 最后一个语句返回@ t2

中存储的所有记录

第一个过程正常,但第二个过程仅适用于SQL Server。

我在java应用程序中收到此错误信息

  

语句未返回结果集

我希望这返回一个结果集,其中包含我在的select语句 查询结束。

请问有解决方法吗?

2 个答案:

答案 0 :(得分:28)

你的[p2]存储过程需要在开头包含SET NOCOUNT ON来抑制“受影响的 n 行”计数,这样JDBC就不会对它应该放在什么位置感到困惑进入ResultSet:

CREATE PROCEDURE p2
AS

SET NOCOUNT ON;

declare @t1 table(
    ref varchar(20)
)

-- ... and so on

有关SET NOCOUNT的详细信息,请参阅

SET NOCOUNT (Transact-SQL)

有关从存储过程调用返回的内容的详细信息,请参阅

How to get everything back from a stored procedure using JDBC

答案 1 :(得分:2)

使用方法"执行"而不是" executeQuery"。