【问题标题】:running java code from oracle从 oracle 运行 java 代码
【发布时间】:2025-11-27 16:45:02
【问题描述】:

我正在使用 oracle 作为以下版本:

Oracle Database 12c 标准版 12.1.0.2.0 - 64 位生产

PL/SQL 版本 12.1.0.2.0 - 生产

“CORE 12.1.0.2.0 生产”

适用于 64 位 Windows 的 TNS:版本 12.1.0.2.0 - 生产 NLSRTL 版本 12.1.0.2.0 - 生产

java版本:

SELECT dbms_java.get_ojvm_property(PROPSTRING=>'java.version') FROM dual

返回

1.6.0_81

我还在 Java Ecpise (NERO) 中创建了一个类 - 版本 1.8.0.0 jre。

public class TestWEBClass {
    public static String getWEBString() {
        String s = "abcde";
        // s = System.getProperty("sun.arch.data.model") ;
        return s;
    }
}

我在oracle中添加了一个文件夹:

create or replace directory MYFOLDER_WORKDIR as 'C:\myfolder\projects\java';  

我编译那个类,放到上面的文件夹中,通过sqldeveloper工具添加那个类(右键JAVA子文件夹->加载java->oracle目录类->选择MYFOLDER_WORKDIR和类文件。

在上面之后:

create or replace FUNCTION TEST_TESTCLSS RETURN varchar AS LANGUAGE JAVA 
name 'TestWEBClass.getWEBString() return varchar'

在sql中运行时:

select TEST_TESTCLSS from dual;

遇到以下异常:

ORA-29532:Java 调用因未捕获的 Java 异常而终止:java/lang/UnsupportedClassVersionError:TestWEBClass(不支持的 major.minor 版本 52.0) 29532. 00000 - “Java 调用因未捕获的 Java 异常而终止:%s” *原因:发出 Java 异常或错误信号,但无法发出信号 由Java代码解决。 *操作:修改 Java 代码,如果此行为不是预期的。

所以我想到了使用32位JRE系统库-(在eclipse中:包->鼠标右键->属性->库->添加外部库->选择库的文件夹->安装库->添加- > 标准 vm -> 选择正确的文件夹)。同样的错误。

所以,我决定将文件夹从 oracle-java 复制到我自己的计算机上。 现在我在 eclipse 中编译错误时进入我的代码:

java.lang.UnsupportedClassVersionError: TestWEBClass : Unsupported major.minor java.lang.ClassLoader.defineClass1(Native Method) 的 52.0 版 java.lang.ClassLoader.defineClassCond(ClassLoader.java:637) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:621) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 在 java.net.URLClassLoader.access$000(URLClassLoader.java:58) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:197) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:306) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:247) 中的异常 线程“主”

如何才能从 oracle 运行一个简单的 java 代码(使用类)?

我可以将新版本的 Java JDK 放在 Oracle 端吗?这样做的最佳做法是什么?

谢谢。

【问题讨论】:

  • 您是否有理由不想从 Oracle 中的源代码编译这个简单的类 - 您是否必须在外部编译它(在这种情况下,您必须在 Eclipse 中使用 1.6 JDK)并加载它?
  • 我确实引用了 oracle 的同一个 jdk(把它放在文件夹中,我尝试了另一个 32 位版本,在代码上检查一下我做得对:s = System.getProperty("sun .arch.data.model") ;, 32bit 就可以了,所以我知道如何附加到其他java版本,所以我从 oracle 的 jdk 文件夹中一一复制 E:\oracle\product\12.1.0 \dbhome_1\OPatch\jre\lib )。我认为 jdk 的版本与 jre 的版本不同,但如何做到这一点并不明显。但我想我解决了这个问题,通过在该对话框上选中 javase-1.6 复选框后选择执行环境。

标签: java eclipse oracle


【解决方案1】:

这可以通过将相同版本的 jre 附加到 jdk 文件来解决。

这可以通过选择执行环境(项目 -> 属性 -> 库 -> 选择相关库 -> 编辑 -> 并选中该对话框中 javase-1.6 的复选框)来完成。

【讨论】: