当前位置: 代码迷 >> DB2 >> [DB2] java写的存储过程编译通过,执行报错!解决方案
  详细解决方案

[DB2] java写的存储过程编译通过,执行报错!解决方案

热度:6608   发布时间:2013-02-26 00:00:00.0
[DB2] java写的存储过程编译通过,执行报错!
在网上看到,只要把java class 编译好之后放到lib/function下面即可。若是jar,则放到jar下面对应的schema下即可。
不用重新启动,
(Jdb是类名,jdb是方法名,参数是String input)。编译后查看如下:
CREATE PROCEDURE EFAN.JAVAPROC ( IN INPUT VARCHAR(100) )
  SPECIFIC SQL080313122559100
  LANGUAGE JAVA
  EXTERNAL NAME 'jdb(Ljava/lang/String; )V'
  PARAMETER STYLE JAVA
  NOT DETERMINISTIC
  FENCED
  THREADSAFE
  EXTERNAL ACTION
  MODIFIES SQL DATA
  CALLED ON NULL INPUT
  NO DBINFO
  INHERIT SPECIAL REGISTERS;

编译可以通过,但是执行时报错:
ERROR [42724] [IBM][DB2/NT] SQL4304N Java stored procedure or user-defined function "EFAN.JDB", specific name "SQL080313122559100" could not load Java class "Jdb", reason code "1". SQLSTATE=42724


这里的classpath指的是在系统环境变量里建的吗?
--------------------

解释:

不能装入由 CREATE PROCEDURE 或 CREATE FUNCTION 语句的
EXTERNAL NAME 子句给定的 Java 类。原因码为:


1 在 CLASSPATH 上找不到该类。

2 该类未实现必需的接口 ("COM.ibm.db2.app.StoredProc"
或 "COM.ibm.db2.app.UDF") 或缺少 Java "public"
存取权标志。

3 缺省构造函数失败或不可用。

4 未能为 "jdbc:default:connection" 装入驱动程序。

5 未能建立缺省上下文。



用户响应:

确保编译的“.class”文件安装在 CLASSPATH
中,例如在“sqllib/function”下。确保它实现必需的
Java 接口且是“public”。

sqlcode : -4304

sqlstate : 42724


------解决方案--------------------------------------------------------
来接分了, 是classpath 的问题吗?
------解决方案--------------------------------------------------------
路过下,存储过程本来就没有学好,现在很久没有用都忘玩了,想楼主学习、
  相关解决方案