DB2外部存储过程(JAVA)



我一直在尝试调用一个java jar文件,该文件有一个以String和boolean作为输入参数的方法。

存储过程如下:

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', ?) 

java类如下:

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;
}
}

当我将布尔参数更改为String时,它可以很好地工作,但我似乎无法使它适用于布尔参数。

我在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的新手。

我很好奇它是如何以您提供的方式使用String参数的
参数式JAVA程序:

SQL参数
对应于CREATE PROCEDURE语句中的输入参数列表OUT或INOUT模式参数作为单元素数组。对于中指定的每个结果集CREATE PROCEDURE语句的DYNAMIC RESULT SETS子句,aResultSet类型的单个元素数组被附加到参数列表

Java例程中支持的SQL数据类型:

| SQL Column Type | Java Data Type |
+-----------------+----------------+
| BOOLEAN         | boolean        |

必须使用boolean基元类型,而不是java.lang.Boolean
所以,试试:

public static void javastp( String name,
boolean[] outparm, 
ResultSet[] rs 
)
....
//Execute query and set output parm
rs[0] = stmt.executeQuery();
outparm[0] = true;

Db2 LUW版本11.x对于设置类型为boolean的OUTPUT参数的java存储过程存在软件缺陷(在java代码中设置布尔输出参数时,存储过程将抛出NullPointerException(。

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

缺陷编号为IT35542

根据https://www.ibm.com/support/pages/apar/IT35542

最新更新