简体   繁体   English

从Oracle运行Java代码

[英]running java code from oracle

I am using oracle as following version: 我正在使用以下版本的oracle:

Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production Oracle Database 12c标准版12.1.0.2.0版-64位生产

PL/SQL Release 12.1.0.2.0 - Production PL / SQL版本12.1.0.2.0-生产

"CORE 12.1.0.2.0 Production" “ CORE 12.1.0.2.0生产”

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

Version of java: Java版本:

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

returns 回报

1.6.0_81 1.6.0_81

I also create a class within Java Ecplise (NERO) - version 1.8.0.0 jre. 我还在Java Ecplise(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;
    }
}

I added a folder in oracle: 我在oracle中添加了一个文件夹:

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

I compile that class, put in on the above folder, and by sqldeveloper tool add that class (right click on JAVA subfolder -> load java -> oracle directory class -> choose MYFOLDER_WORKDIR and the class file. 我编译该类,放在上面的文件夹中,然后通过sqldeveloper工具添加该类(右键单击JAVA子文件夹->加载Java-> oracle目录类->选择MYFOLDER_WORKDIR和该类文件。

After above: 以上之后:

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

when running in sql: 在sql中运行时:

select TEST_TESTCLSS from dual;

The following exception encountered: 遇到以下异常:

ORA-29532: Java call terminated by uncaught Java exception: java/lang/UnsupportedClassVersionError : TestWEBClass (Unsupported major.minor version 52.0) 29532. 00000 - "Java call terminated by uncaught Java exception: %s" *Cause: A Java exception or error was signaled and could not be resolved by the Java code. ORA-29532:Java调用因未捕获的Java异常而终止:java / lang / UnsupportedClassVersionError:TestWEBClass(不受支持的major.minor版本52.0)29532。00000-“ Java调用因未捕获的Java异常而终止:%s” *原因:Java异常或错误已发出信号,并且Java代码无法解决。 *Action: Modify Java code, if this behavior is not intended. *操作:如果不希望出现这种情况,请修改Java代码。

So I have thought of using 32bit JRE system library - (in eclipse: package -> right mouse click -> properties -> libraries -> add exterenal library -> choose folder of the library -> installed library -> add -> standard vm -> choose the right folder). 所以我想到了使用32位JRE系统库-(在Eclipse中:包->右键单击->属性->库->添加外部库->选择库的文件夹->已安装的库->添加->标准vm ->选择正确的文件夹)。 Same error. 同样的错误。

So, I decided to copy the folder from oracle-java to my own computer. 因此,我决定将文件夹从oracle-java复制到我自己的计算机上。 Now I get in my code when compiling in eclipse the error: 现在我在eclipse编译错误时进入代码:

java.lang.UnsupportedClassVersionError: TestWEBClass : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Exception in thread "main" java.lang.UnsupportedClassVersionError:TestWEBClass:java.lang.ClassLoader.defineClass1(本机方法)在java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)在java.lang.ClassLoader.defineClass(本机方法)不支持java.net.URLClassLoader.defineClass(URLClassLoader.java:283)上的java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)上的ClassLoader.java:621)java.net.URLClassLoader.access $ 000(URLClassLoader.java: 58)在java.net.URLClassLoader $ 1.run(URLClassLoader.java:197)在java.security.AccessController.doPrivileged(本机方法)在java.net.URLClassLoader.findClass(URLClassLoader.java:190)在java.lang。 sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)处的ClassLoader.loadClass(ClassLoader.java:306)在java.lang.ClassLoader.loadClass(ClassLoader.java:247)中的线程

How can I proceed in order run a simple java code (using class) from oracle? 我如何才能从oracle命令运行简单的Java代码(使用类)?

Can I just put new version of Java JDK in Oracle side? 我可以将新版本的Java JDK放在Oracle方面吗? What is the best practice doing that? 最佳做法是什么?

Thanks. 谢谢。

That can be solved for attaching same version of jre to the jdk files. 将相同版本的jre附加到jdk文件可以解决。

That can be done, by choosing the execution environment (project -> properties -> libraries -> choose the relevant library -> edit -> and checking the checkbox for javase-1.6 on that dialogbox). 这可以通过选择执行环境来完成(项目->属性->库->选择相关库->编辑->并选中该对话框上Javase-1.6的复选框)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM