【问题标题】:jdbc sql error: statement did not return a result setjdbc sql错误:语句没有返回结果集
【发布时间】:2014-08-17 05:05:41
【问题描述】:

我有两个存储过程如下:

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 应用程序中收到一条错误消息

语句没有返回结果集

我希望它返回一个带有我在 查询结束。

请问有办法解决吗?

【问题讨论】:

    标签: sql-server stored-procedures jdbc


    【解决方案1】:

    您的 [p2] 存储过程需要在开头包含 SET NOCOUNT ON 以抑制“受影响的 n 行”计数,因此 JDBC 不会混淆它应该放入什么结果集:

    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

    【讨论】:

    • 对于收到错误的任何人:“org.pentaho.di.core.exception.KettleDatabaseException:该语句没有返回结果集。”来自 PDI 这个答案也解决了使用 JDBC(Native) 驱动程序时的问题。
    【解决方案2】:

    使用方法“execute”而不是“executeQuery”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多