Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问java中从sql函数获取的多个返回值_Java_Sql_Return Value_Sql Function - Fatal编程技术网

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

如何访问java中从sql函数获取的多个返回值,java,sql,return-value,sql-function,Java,Sql,Return Value,Sql Function,我有java代码,可以访问SQL函数的返回值SQL函数返回四个VARCHAR类型的值。 下面给出了java代码 ResultSet rs = null; CallableStatement stmt = null; List<TestObj> objList= new ArrayList<TestObj>(); try { stmt = con.prepareCall(

我有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();
        } 
ResultSet rs=null;
CallableStatement stmt=null;
List objList=new ArrayList();
尝试
{
stmt=con.prepareCall(“{?=调用测试函数(?)}”);
整数计数=0;
stmt.registerOutParameter(++count,Types.VARCHAR);
stmt.setString(++计数,“A”);
stmt.setString(++计数,“B”);
stmt.execute();
rs=stmt.getResultSet();
while(rs.next())
{
TestObj obj=新的TestObj();
obj.setA(rs.getString(“TEST1”);
obj.setB(rs.getString(“TEST2”));
obj.setC(rs.getString(“TEST3”));
对象setD(rs.getString(“TEST4”);
objList.add(obj);
}
}
捕获(SQLE异常)
{
e、 printStackTrace();
}
最后
{
rs.close();
stmt.close();
} 

运行时,它在“rs.next()”处给我一个空点异常。任何人可以告诉我如何从函数访问返回值吗

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

使用
stmt.getXYZ(列)
方法直接(从,例如,或this1)访问存储过程的
参数或函数调用的结果

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

[返回]当前结果作为ResultSet对象,如果[…]没有更多结果,则返回null

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


1发布的代码应该看起来更像下面的代码。我对“函数返回四个[…]值,[具有]VARCHAR类型”做了一些更改。YMMV

直接使用
stmt.getXYZ(列)
方法(例如,从或this1)访问存储过程的
out
参数或函数调用的结果

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

[返回]当前结果作为ResultSet对象,如果[…]没有更多结果,则返回null

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


1发布的代码应该看起来更像下面的代码。我对“函数返回四个[…]值,[具有]VARCHAR类型”做了一些更改。YMMV


请告诉我如何访问return valuestry,而(rs.hasNext())您能否提及SQL函数代码..它是第三方函数。我无法访问职能机构。它返回varchar type四个参数请告诉我如何访问return valuestry,而(rs.hasNext())您能否提及SQL函数代码..它是第三方函数。我无法访问职能机构。它返回varchar类型的四个参数
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.