gpt4 book ai didi

java - 如何处理两个存储过程,一个返回单个值,另一个返回行?

转载 作者:行者123 更新时间:2023-12-01 10:01:45 25 4
gpt4 key购买 nike

我正在使用 Sybase 数据库。

假设我有一个像...这样的查询

CREATE PROCEDURE dbo.procedureA (
@a int
)
as
begin
IF EXISTS (SELECT 1 FROM dbo.T WHERE a = @a)
return 1
ELSE
return -1
end

...以及另一个包含返回多行的简单 SELECT 查询的过程。

我必须在一个程序中处理它们。如何在运行时确定该过程是返回一个值还是一组行?

P.S: 我无法使用 OUT 参数。

最佳答案

CallableStatement 对象的 .execute() 方法返回一个 boolean 值,指示返回的(第一个)结果是否为 ResultSet。您可以使用该值来确定存储过程是否返回 ResultSet,然后获取 RETURN 值(如果有),如下所示:

try (CallableStatement s = conn.prepareCall("{ ? = CALL dbo.test3 (?) }")) {
s.registerOutParameter(1, Types.INTEGER);
s.setInt(2, 3); // set input parameter to value 3, for example
if (s.execute()) {
// .execute() returned true, so we have a ResultSet
System.out.println("ResultSet values:");
try (ResultSet rs = s.getResultSet()) {
while (rs.next()) {
System.out.println(rs.getInt(1));
}
}
System.out.println("");
}
// get RETURN value (or zero if no RETURN statement in stored procedure)
System.out.printf("RETURN value: %d%n", s.getInt(1));
}

我没有可用于测试的 Sybase 数据库,但我验证了它可以与 jTDS 和 SQL Server 配合使用。

关于java - 如何处理两个存储过程,一个返回单个值,另一个返回行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36764304/

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