gpt4 book ai didi

java - 从 Java 调用其中包含游标和时态表的 MS Sql 服务器存储过程?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:05:41 25 4
gpt4 key购买 nike

我有一个用 MS Sql Server 编写的存储过程,其中包含游标和时态表,并在末尾返回一个选择查询的结果。

我正在尝试使用以下代码从 java 中调用它

final Connection conn = getConnection();
final CallableStatement statement = conn.prepareCall("{call dbo.storedProcName (?) }");
statement.setString(1, "value1,value2");
final ResultSet rs = statement.executeQuery();
while (rs.next()) {
//some code
}

当我在 java 中执行此代码时,我得到的结果集为空。当我使用从 java 代码传递的相同参数在 sql server 控制台上运行它时,存储的 proc 返回值。

知道是什么导致了这个问题吗?

我正在使用 sqljdbc4.jar、Java 7 和 SQL Server 2008 R2。

错误栈

com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:392)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:281)

存储过程粗略格式

create procedure [dbo].[storedProcName](
@inpurparam varchar(4000)
)
as
begin
select some_values into #temp_table where value in (@inputparam)
//declare some_variables
declare @table2 table(col1 varchar(10), col2 varchar(10))
declare cursor for select * from #temp_table
open cursor
fetch next from cursor into some_params
while @@fetch_status = 0
begin
//some processing
//insert into table2 based on some logic
fetch next ..
end
close cursor
deallocate cursor
drop table #temp_table
select col1, col2 from @table2
order by col1

结束走

最佳答案

我能够通过对存储过程进行轻微更改来修复它。

create procedure [dbo].[storedProcName](
@inpurparam varchar(4000)
)
as
begin
**SET NOCOUNT ON**
..
..

我不知道这是如何解决这个问题的,但它非常有效。如果有人能对此有所启发,我将不胜感激。

关于java - 从 Java 调用其中包含游标和时态表的 MS Sql 服务器存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22010666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com