首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > IBM DB2 >

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

2012-03-17 
[DB2] java写的存储过程编译通过,执行报错!在网上看到,只要把java class 编译好之后放到lib/function下面

[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 的问题吗?
[解决办法]
路过下,存储过程本来就没有学好,现在很久没有用都忘玩了,想楼主学习、

热点排行