【发布时间】:2015-04-07 09:08:28
【问题描述】:
我创建的Java存储过程如下,能够使用AS400 Qshell命令解释器生成.class文件。
import java.sql.*;
public class sample
{
public sample(){
super();
}
/**
* @param args
*/
public static void Test(int test) throws SQLException, Exception {
// TODO Auto-generated method stub
try
{ Class.forName ("com.ibm.as400.access.AS400JDBCDriver").newInstance ();
String url = "jdbc:as400://ilava;naming=system;prompt=false;user=IPGUI;password=IPGUI;libraries=IPSRFILI,IPTSFILI,IPWMFILI,IPPAFILI,IPASFILI,IPSAFILI,IPTSUTL;translate binary=true";
Connection con = DriverManager.getConnection(url);
PreparedStatement ps = con.prepareStatement("INSERT INTO IPTSFILI.TEMP VALUES ('IP', 'WELCOME TO SQLJ')");
ps.executeUpdate();
ps.close();
con.close();
}
catch (Exception e)
{
System.out.println (e);
System.exit(1);
}
}
}
创建了相应的存储过程
CREATE procedure IPTSFILI.SPSAMPLE (
IN TEST INTEGER )
LANGUAGE JAVA
SPECIFIC IPTSFILI.SPSAMPLE
DETERMINISTIC
MODIFIES SQL DATA
CALLED ON NULL INPUT
EXTERNAL NAME 'sample!Test'
PARAMETER STYLE JAVA ;
当程序被调用(在 JAVA 中使用 callable 语句)时,它会给出以下错误
java.sql.SQLException: [SQL4304] Java stored procedure or user-defined function SPSAMPLE, specific name SPSAMPLE could not load Java class Ä?_ÑÂ_À¦ÀÂÄ/øøàâàÊÑÎÁÊ for reason code 3.
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:687)
at com.ibm.as400.access.JDError.throwSQLException(JDError.java:653)
at com.ibm.as400.access.AS400JDBCStatement.commonExecute(AS400JDBCStatement.java:920)
at com.ibm.as400.access.AS400JDBCPreparedStatement.execute(AS400JDBCPreparedStatement.java:1018)
at Exec.main(Exec.java:23)
将.class 文件放在QIBM\UserData\OS400\SQLLib\Function 目录中。
关于如何解决这个问题的任何建议?
【问题讨论】:
-
你在哪里调用存储过程?在您的代码中看不到它。此外,提供完整的堆栈跟踪会有所帮助
-
@Ortis,更新了堆栈跟踪。
-
@AntoKris 类应该实现
COM.ibm.db2.app.StoredProc接口吧?你可以试试看会发生什么 -
看起来像是编码问题,您是如何创建存储过程的?您可以尝试使用 iSeries 访问重新创建它吗?
标签: java ibm-midrange java-stored-procedures iseries-navigator