DB2外部存储过程(JAVA)
我一直在尝试调用一个JavaJAR文件,该文件有一个将字符串和布尔值作为输入参数的方法 存储过程如下所示: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'
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),这可以正常工作,但我无法让布尔[]正常工作