如何在PL / SQL中调用此Java程序

时间:2018-08-12 11:45:57

标签: java java-stored-procedures

我有一个Java程序,该程序显示系统中可用的端口列表。

该程序在命令提示符下运行良好。但是现在我想通过PL / SQL使用此Java程序。

但是我面临附件错误。

花很多时间但不能成功。

下面是我的Java程序。

import javax.comm.*;
import java.util.*;

/** List all the ports available on the local machine. **/
public class TestPorts
{
public static void main (String args[])
{

Enumeration port_list = CommPortIdentifier.getPortIdentifiers();

while (port_list.hasMoreElements())
{
CommPortIdentifier port_id = (CommPortIdentifier)port_list.nextElement();

if (port_id.getPortType() == CommPortIdentifier.PORT_SERIAL)
{
System.out.println ("Serial port: " + port_id.getName());
}
else if (port_id.getPortType() == CommPortIdentifier.PORT_PARALLEL)
{
System.out.println ("Parallel port: " + port_id.getName());
}
else
System.out.println ("Other port: " + port_id.getName());
}
} // main
} // class PortList[enter image description here][1]

D:\>loadjava -u hr1/hr1@orcl -v -resolve TestPorts.java
arguments: '-u' 'hr1/hr1@orcl' '-v' '-resolve' 'TestPorts.java'
creating : source TestPorts
loading  : source TestPorts
resolving: source TestPorts
errors   : source TestPorts
    ORA-29535: source requires recompilation
    TestPorts:10: cannot resolve symbol
    symbol  : variable CommPortIdentifier
    location: class TestPorts
    Enumeration port_list = CommPortIdentifier.getPortIdentifiers();
                            ^
    TestPorts:14: cannot resolve symbol
    symbol  : class CommPortIdentifier
    location: class TestPorts
    CommPortIdentifier port_id = (CommPortIdentifier)port_list.nextElement();
    ^
    TestPorts:14: cannot resolve symbol
    symbol  : class CommPortIdentifier
    location: class TestPorts
    CommPortIdentifier port_id = (CommPortIdentifier)port_list.nextElement();
                                  ^
    TestPorts:16: cannot resolve symbol
    symbol  : variable CommPortIdentifier
    location: class TestPorts
    if (port_id.getPortType() == CommPortIdentifier.PORT_SERIAL)
                                 ^
    TestPorts:20: cannot resolve symbol
    symbol  : variable CommPortIdentifier
    location: class TestPorts
    else if (port_id.getPortType() == CommPortIdentifier.PORT_PARALLEL)
                                      ^
    5 errors
The following operations failed
    source TestPorts: resolution
exiting  : Failures occurred during processing

D:\>

3 个答案:

答案 0 :(得分:0)

您可以尝试运行.class文件而不是.java

  • 首先使用javac TestPorts.java编译Java类(其输出为TestPorts.class)
  • loadjava -u hr1 / hr1 @ orcl -v -resolve TestPorts.class

答案 1 :(得分:0)

javax.comm不是标准JDK的一部分,因此您需要在运行ojvmtc之前使用loadjava工具手动添加它,请参见ojvmtc tool doc

答案 2 :(得分:0)

首先让我们检查数据库上的CommPortIdentifier.class。

作为SYS: SELECT对象名称,状态来自dba_objects 其中的object_type如'%JAVA%'和dbms_java.longname(object_name)如'%CommPortIdentifier%';

如果未选择任何行,则可以尝试使用loadjava加载包含CommPortIdentifier.class的所需jar库? 然后再次在数据库上编译代码。