运行调用我已加载的 JAR 文件的函数时,我在 Postgres 中收到 java.lang.ClassNotFoundException: 错误。我已经在我的数据库中安装并配置了 PL/JAVA(包括提供的示例),并且可以成功运行示例。我没有尝试加载/安装我的第一个 JAR,但我做错了。
我的主机控制操作系统版本:CentOS 6.8。Postgres 是 8.4 版。
我正在尝试安装我自己的非常简单的 java 类,它是提供的示例 Parameters.addOne 类的派生类。我所有的代码都在 /tmp 中。以下是我遵循的步骤:
道格.java:
package com.msmetric;
import java.math.BigDecimal;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.logging.Logger;
public class Doug {
public static int addOne(int value) {
return value + 1;
}
}
使用 'javac Doug.java' 编译 Doug.java 成功。
使用 'jar -cvf Doug.jar Doug.class 创建包含 Doug.class 文件的 JAR 文件。这工作正常。
现在我将 JAR 文件加载到 Postgres(公共模式)中,更改类路径,创建调用 JAR 的函数,然后尝试在 psql 提示符下运行。
从 psql 运行 sqlj.install_jar:
select sqlj.install_jar('file:/tmp/Doug.jar','Doug',false);
在 Postgres 中设置类路径(来自 psql 提示 postgres=#):
select sqlj.set_classpath('public','Doug');
创建调用 JAR 的函数。这个创建函数代码直接取自 PL/JAVA 附带的 examples.ddr 文件。我只是将 org.postgres 更改为 com.msmetric。
create or replace function addone(int) returns int as 'com.msmetric.Doug.addOne(java.lang.Integer)' language java;
现在加载了 JAR 并创建了函数,我尝试运行它。这个函数应该简单地将 1 加到提供的数字上。
select addone(3);
结果:错误:java.lang.ClassNotFoundException:com.msmetric.Doug
想法?