0

我有一个 Oracle 12 数据库,我正在尝试加载一个 Java 函数,以便可以从 PL/SQL 调用它。

我编写了一个 NetBeans 项目来测试我的功能,它运行良好。但是,在 Oracle 内部,它无法编译。一个因素是它引用了一个包含大约 75 个 jar 文件的库。我之前使用将这些罐子加载到数据库中

loadjava -u ......... *.jar -jarasresource

(这些 jar 与 NetBeans 库的一部分相同。)

使用 loadjava 将源代码加载到数据库中:

loadjava -u .........  -r -v -genmissing PictureGenerator.java

错误消息提到了导入语句中的类。

StandardCharsets 是 JDK 的一部分,不是吗?

其他导入的类包含在我加载的 jar 文件中。

请告诉我如何让我的课程在 Oracle 中解决。

这是来源:

package gov.nlm.structuredepictor;

import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;

import chemaxon.formats.MolExporter;
import chemaxon.formats.MolImporter;
import chemaxon.struc.Molecule;

public class PictureGenerator
{
  public static byte[] getPngForMol(String molString, String sbFormat)
  {
    MolImporter mi = null;
    try
    {
        ByteArrayInputStream inStream = new ByteArrayInputStream(molString.getBytes(StandardCharsets.UTF_8));
        if (inStream == null)
        {
            System.err.print("Error creating ByteArrayInputStream");
            return null;
        }
        mi = new MolImporter(inStream);
        Molecule mol = mi.read();

        mi.close();

        byte[] b = MolExporter.exportToBinFormat(mol, sbFormat);
        return b;

    } catch (Exception ex1)
    {
        System.err.println("Error creeating MolImporter: " + ex1.getMessage());
        //Logger.getLogger(PictureGenerator.class.getName()).log(Level.SEVERE, null, ex1);
    }

    return null;
}

}

感谢您对JDK版本的建议!我将数据库更改为使用 JDK 7,并且能够无错误地编译。下一步是声明 PL/SQL 函数 create 或 replace function getPngForMol(molString varchar2, sbFormat varchar2) return raw as LANGUAGE JAVA Name 'gov.nlm.structuredepictor.PictureGenerator.getPngForMol(java.lang.String, java.lang.字符串)返回字节[]';

这编译没有错误。但是,在运行时,我收到此错误:错误报告 - ORA-29532:Java 调用由未捕获的 Java 异常终止:java.lang.NoClassDefFoundError ORA-06512:在“CHEM.GETPNGFORMOL”,第 1 行 ORA-06512:在第 11 行29532. 00000 - “Java 调用因未捕获的 Java 异常而终止:%s” *原因:已发出 Java 异常或错误信号,无法由 Java 代码解决。*操作:修改 Java 代码,如果此行为不是预期的。

这有什么建议吗?

4

0 回答 0