gpt4 book ai didi

java - 如何在java中访问从sql函数获取的多个返回值

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:03 24 4
gpt4 key购买 nike

我有 java 代码,应该访问 SQL 函数的返回值。 SQL函数返回四个VARCHAR类型的值。java代码如下

        ResultSet rs = null;
CallableStatement stmt = null;
List<TestObj> objList= new ArrayList<TestObj>();
try
{
stmt = con.prepareCall( "{? = call TEST_FUNCTION(?,?) }");
int count = 0;
stmt.registerOutParameter( ++count, Types.VARCHAR );
stmt.setString( ++count, "A");
stmt.setString( ++count, "B");
stmt.execute();
rs = stmt.getResultSet();
while( rs.next() )
{
TestObj obj= new TestObj ();
obj.setA( rs.getString( "TEST1" ) );
obj.setB( rs.getString( "TEST2" ) );
obj.setC( rs.getString( "TEST3" ) );
obj.setD( rs.getString( "TEST4" ) );
objList.add( obj);
}
}
catch( SQLException e )
{
e.printStackTrace();
}
finally
{
rs.close();
stmt.close();
}

运行时,它在“rs.next()”处给出了一个空点异常。谁能告诉我如何访问函数的返回值

注意:将值传递给函数并执行查询工作正常,没有任何异常( stmt.execute() 运行没有任何异常)

最佳答案

直接使用 stmt.getXYZ(column) 方法(来自 CallableStatement ,例如 like this 或 this1)来访问存储过程的 out 参数或函数调用的结果。

有关生成 NPE 异常的原因,请参阅 Statement.getResultSet :

[Returns] the current result as a ResultSet object or null if [..] there are no more results.

注册的out参数不计入任何结果集!

<小时/>

1 发布的代码可能应该类似于以下内容。我做了一些更改to treat the result as an array每个“函数返回四个[..]值,其中[具有] VARCHAR类型”。 YMMV。

stmt = con.prepareCall( "{ ? = call TEST_FUNCTION(?,?) }");
// Specify that an array is expected.
stmt.registerOutParameter(1, Types.ARRAY);
stmt.setString(2, "A");
stmt.setString(3, "B");
stmt.execute();

// Access the out parameter/result.
Array arr = stmt.getArray(1);
String[] data = (String[]) arr.getArray();
// Do stuff - no check for if arr is non-null because if it's null then
// an Exception is likely an "appropriate" reaction. Adapt as required.

// And do not use stmt.getResultSet() because none was returned.

关于java - 如何在java中访问从sql函数获取的多个返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19970346/

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