我在运行调用我已加载的JAR文件的函数时遇到Postgres中的java.lang.ClassNotFoundException:错误。我已经在我的数据库中安装并配置了PL/JAVA(包括交付的示例),并可以运行示例以取得成功。我不是试图加载/安装我的第一个JAR,但我做错了什么。Postgres PL/JAVA:在数据库中加载JAR文件后出现java.lang.ClassNotFoundException错误
我的主机控制操作系统版本:CentOS 6.8。 Postgres是8.4版本。
我试图安装我自己的非常简单的java类,这是派生的示例Parameters.addOne类的衍生物。我所有的代码都在/ tmp中。下面是我已经按照步骤:
Doug.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文件。这工作正常。
在psql运行SQLJ.INSTALL_JAR:
select sqlj.install_jar('file:/tmp/Doug.jar','Doug',false);
设置内部Postgres的类路径(在psql提示的Postgres =#):
select sqlj.set_classpath('public','Doug');
创建调用该函数罐。这个创建功能代码直接来自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文件到Postgres的(公共模式),改变类路径,创建调用JAR的功能,然后尝试在psql的提示符下运行。
现在,随着加载JAR和函数创建的,我尝试运行它。这个函数应该简单地给所提供的数字加1。
select addone(3);
结果: 错误:抛出java.lang.ClassNotFoundException:com.msmetric.Doug
的思考?