【发布时间】: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 复选框后选择执行环境。