DB2外部存储过程(JAVA)

DB2外部存储过程(JAVA),java,stored-procedures,db2,external,db2-luw,Java,Stored Procedures,Db2,External,Db2 Luw,我一直在尝试调用一个JavaJAR文件,该文件有一个将字符串和布尔值作为输入参数的方法 存储过程如下所示: CREATE PROCEDURE TBF_STG.PROC( IN in1 VARCHAR(25), OUT out1 BOOLEAN ) LANGUAGE java PARAMETER STYLE java DYNAMIC RESULT SETS 1 FENCED EXTERNAL NAME 'name1:connection.Connect.javastp'

我一直在尝试调用一个JavaJAR文件,该文件有一个将字符串和布尔值作为输入参数的方法

存储过程如下所示:

CREATE PROCEDURE TBF_STG.PROC( IN in1 VARCHAR(25), OUT out1 BOOLEAN )
  LANGUAGE java
  PARAMETER STYLE java 
  DYNAMIC RESULT SETS 1
  FENCED 
  EXTERNAL NAME 'name1:connection.Connect.javastp'
CALL TBF_STG.PROC('xyz', ?) 
public class Connect {
    static Connection con = null;
    public static void javastp( String name,
            Boolean outparm, 
            ResultSet[] rs 
            )
                    throws SQLException
    {
        Connection con = DriverManager.getConnection( "jdbc:default:connection" );
        PreparedStatement stmt = null;
        String sql = "SELECT NAME FROM TBF_STG.TEST WHERE NAME = ?";

        //Prepare the query with the value of name  
        stmt = con.prepareStatement( sql );
        stmt.setString( 1, name );

        //Execute query and set output parm
        rs[0] = stmt.executeQuery();
        outparm = true;

        //Close open resources
        if (stmt != null) stmt.close();
        if (con != null) con.close();  

        return;
    }
}
我称之为以下程序:

CREATE PROCEDURE TBF_STG.PROC( IN in1 VARCHAR(25), OUT out1 BOOLEAN )
  LANGUAGE java
  PARAMETER STYLE java 
  DYNAMIC RESULT SETS 1
  FENCED 
  EXTERNAL NAME 'name1:connection.Connect.javastp'
CALL TBF_STG.PROC('xyz', ?) 
public class Connect {
    static Connection con = null;
    public static void javastp( String name,
            Boolean outparm, 
            ResultSet[] rs 
            )
                    throws SQLException
    {
        Connection con = DriverManager.getConnection( "jdbc:default:connection" );
        PreparedStatement stmt = null;
        String sql = "SELECT NAME FROM TBF_STG.TEST WHERE NAME = ?";

        //Prepare the query with the value of name  
        stmt = con.prepareStatement( sql );
        stmt.setString( 1, name );

        //Execute query and set output parm
        rs[0] = stmt.executeQuery();
        outparm = true;

        //Close open resources
        if (stmt != null) stmt.close();
        if (con != null) con.close();  

        return;
    }
}
java类如下所示:

CREATE PROCEDURE TBF_STG.PROC( IN in1 VARCHAR(25), OUT out1 BOOLEAN )
  LANGUAGE java
  PARAMETER STYLE java 
  DYNAMIC RESULT SETS 1
  FENCED 
  EXTERNAL NAME 'name1:connection.Connect.javastp'
CALL TBF_STG.PROC('xyz', ?) 
public class Connect {
    static Connection con = null;
    public static void javastp( String name,
            Boolean outparm, 
            ResultSet[] rs 
            )
                    throws SQLException
    {
        Connection con = DriverManager.getConnection( "jdbc:default:connection" );
        PreparedStatement stmt = null;
        String sql = "SELECT NAME FROM TBF_STG.TEST WHERE NAME = ?";

        //Prepare the query with the value of name  
        stmt = con.prepareStatement( sql );
        stmt.setString( 1, name );

        //Execute query and set output parm
        rs[0] = stmt.executeQuery();
        outparm = true;

        //Close open resources
        if (stmt != null) stmt.close();
        if (con != null) con.close();  

        return;
    }
}
当我将布尔参数更改为字符串时,它可以正常工作,但我似乎无法使它适用于布尔参数

我在dbeaver中遇到以下错误:

SQL Error [42724]: Java stored procedure or user-defined function "TBF_STG.PROC", specific name "SQL200804144354782" could not call Java method "javastp", signature "(Ljava/lang/String".. SQLCODE=-4306, SQLSTATE=42724, DRIVER=4.8.86

有人能给我指出正确的方向吗,因为我是DB2新手。

我很好奇它怎么能像您提供的那样使用字符串参数。
:

SQL参数
对应于CREATE PROCEDURE语句中的输入参数列表OUT或INOUT模式参数作为 单元素阵列。对于在中指定的每个结果集 CREATE PROCEDURE语句的动态结果集子句 ResultSet类型的单元素数组追加到参数 名单

:

必须使用
boolean
基元类型,而不是
java.lang.boolean
类。
因此,请尝试:


我很好奇它是如何以您提供的方式与字符串参数一起工作的。
:

SQL参数
对应于CREATE PROCEDURE语句中的输入参数列表OUT或INOUT模式参数作为 单元素阵列。对于在中指定的每个结果集 CREATE PROCEDURE语句的动态结果集子句 ResultSet类型的单元素数组追加到参数 名单

:

必须使用
boolean
基元类型,而不是
java.lang.boolean
类。
因此,请尝试:


DB2LUWversion11.x在java存储过程中存在一个软件缺陷,该存储过程设置类型为
boolean
(在java代码中设置布尔输出参数时,存储过程将抛出NullPointerException)

第一个修复程序将出现在V11.1.m4FP6中。我们的期望是,当您应用该修复包时,您的java过程将能够成功地设置布尔输出参数,而不会导致异常

缺陷编号为IT35542


根据

Db2 LUW 11.x版有一个java存储过程的软件缺陷,该存储过程设置的输出参数类型为
boolean
(在java代码中设置布尔输出参数时,存储过程将抛出NullPointerException)

第一个修复程序将出现在V11.1.m4FP6中。我们的期望是,当您应用该修复包时,您的java过程将能够成功地设置布尔输出参数,而不会导致异常

缺陷编号为IT35542


根据

Db2服务器的哪个平台(数据库在Z/OS、i系列或Linux/Unix/Windows上)?什么是Db2服务器版本?Linux Suse Db2版本11 Db2服务器的哪个平台(是Z/OS、i系列或Linux/Unix/Windows上的数据库)?什么是Db2服务器版本?Linux Suse Db2版本11但对于boolean[]我得到以下错误SQL错误[38501]:过程或用户定义函数“TBF_STG.PROC2”,特定名称“SQL200805103049789”,异常“java.lang.NullPointerException”而中止。。SQLCODE=-4302,SQLSTATE=38501,DRIVER=4.8.86查看服务器上的db2diag.log以确定引发此异常的代码行。对于string,我使用了--string[]--数组,即public static void javastp(int-inparm,string[]outparm,ResultSet[]rs),这可以正常工作,但对于boolean[]我无法使boolean[]正常工作我得到以下错误SQL error[38501]:过程或用户定义函数“TBF_STG.PROC2”,特定名称“SQL200805103049789”被中止,异常为“java.lang.NullPointerException”。。SQLCODE=-4302,SQLSTATE=38501,DRIVER=4.8.86查看服务器上的db2diag.log以确定引发此异常的代码行。对于string,我使用了--string[]--数组,即public static void javastp(int-inparm,string[]outparm,ResultSet[]rs),这可以正常工作,但我无法让布尔[]正常工作