Java:从StoredProcess返回XMLType数据,使用ojdbc6.jar xdb6.jar xmlparserv2.jar进行Java到PLSQL的交互

Java:从StoredProcess返回XMLType数据,使用ojdbc6.jar xdb6.jar xmlparserv2.jar进行Java到PLSQL的交互,java,oracle,stored-procedures,xmltype,Java,Oracle,Stored Procedures,Xmltype,我将按照下面的教程从存储过程中检索XMLType数据 示例13-4 XMLType Java:返回XMLType数据 当我运行代码时,我得到了这个错误 Exception in thread "main" java.lang.NoClassDefFoundError: oracle/xml/parser/v2/XMLParseException at oracle.xdb.XMLTypeFactory.create(XMLTypeFactory.java:67) at orac

我将按照下面的教程从存储过程中检索XMLType数据

示例13-4 XMLType Java:返回XMLType数据

当我运行代码时,我得到了这个错误

Exception in thread "main" java.lang.NoClassDefFoundError: oracle/xml/parser/v2/XMLParseException
    at oracle.xdb.XMLTypeFactory.create(XMLTypeFactory.java:67)
    at oracle.sql.OPAQUE.toClass(OPAQUE.java:328)
    at oracle.sql.OPAQUE.toJdbc(OPAQUE.java:278)
    at oracle.sql.OPAQUE.toJdbc(OPAQUE.java:259)
    at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:190)
    at oracle.jdbc.driver.NamedTypeAccessor.getObject(NamedTypeAccessor.java:117)
    at oracle.jdbc.driver.OracleCallableStatement.getObject(OracleCallableStatement.java:1579)
    at oracle.jdbc.driver.OracleCallableStatementWrapper.getObject(OracleCallableStatementWrapper.java:815)
    at com.example.TestXMLDAO.main(TestXMLDAO.java:48)
Caused by: java.lang.ClassNotFoundException: oracle.xml.parser.v2.XMLParseException
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 9 more
Java代码片段:

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import oracle.jdbc.OracleTypes;
import oracle.xdb.XMLType;

            // Prepare to call the stored procedure get_group_details.

            String sql = "{call mypackage.get_records(?,?,?,?,?,?,?,?)}";

            callableStatement = conn.prepareCall(sql);

            callableStatement.setString(1, "");
            callableStatement.setString(2, "");
            callableStatement.setString(3, "");
            callableStatement.setString(4, "");
            callableStatement.setString(5, "abb%");
            callableStatement.setString(6, "F");
            callableStatement.setString(7, "F");
            callableStatement.registerOutParameter(8, OracleTypes.OPAQUE,
                    "SYS.XMLTYPE");

            // execute get_group_details
            // callableStatement.executeQuery();

            callableStatement.executeQuery();

            callableStatement.getObject(8);

            // get cursor and cast it to ResultSet
            xml = (XMLType) callableStatement.getObject(8);

            System.out.println(xml.getStringVal());

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            // Close the statement
            callableStatement.close();
            // Close the connection
            conn.close();
        }
PLSQL过程片段

PROCEDURE get_records
   (
      grp1     IN a.name%TYPE DEFAULT NULL
     ,grp2 IN a.name%TYPE DEFAULT NULL
     ,grp3        IN a.name%TYPE DEFAULT NULL
     ,grp4          IN a.name%TYPE DEFAULT NULL
     ,grp5               IN a.name%TYPE DEFAULT NULL
     ,flag1     IN a.flag%TYPE DEFAULT 'F'
     ,flag2       IN a.flag%TYPE DEFAULT 'F'
     ,xml_type_out        OUT xmltype
   );
jar包括:ojdbc6.jar、xdb.jar

知道我错过了什么吗

这个问题解决了。但是,当部署到JBoss服务器时,另一个问题——如果您有任何想法,请参阅这里——

oracle.xml.parser.v2.XMLParseException
在xmlparserv2.jar中


可在

发行时通过添加所需的罐子进行修复

在类路径中需要以下三个jar,[我仍然有这些jar,由于jar的错误版本,我得到了错误]

ojdbc6.jar、xdb6.jar、xmlparserv2-11.1.1.jar

即使您有这些jar,也可能会出现错误,就像我在包含错误版本的xmlparserv2.jar时遇到的错误一样

所以需要注意的重要一点是这些JAR的版本和兼容性

为我工作的那些[我的Oracle DB版本:11.2.0.4.0]

ojdbc6.jar;xdb6.jar:

import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import oracle.jdbc.OracleTypes;
import oracle.xdb.XMLType;

xmlparserv2-11.1.1.jar 此处提供:()(在sqldeveloper\modules\oracle.xdk_12.1.2中)


[根据@Lukas Eder的建议,删除了第三方参考链接,谢谢]

在各种Oracle产品中都有
xmlparserv2.jar
,其中(在sqldeveloper\modules\Oracle.xdk_12.1.2中)


当然,我不知道是否允许您从SQL Developer(许可证方面)提取jar。

ok,添加了jar+1。现在,在线程“main”java.lang.NoClassDefFoundError中获得
异常:oracle/jdbc/oci8/OCIDBAccess
。让我试试maven来寻找依赖项,这不是一个好主意:(因为这些jar在公共repo中不可用,我们必须下载jar,在本地repo中安装,然后在pom.xml中引用,因此在JBoss服务器上部署应用程序时没有帮助另一个异常-我为这个“xmlparserv2-11.1.1.jar”创建了一个SO线程-真的吗?一些随机的、非官方的第三方maven存储库?这可能包含任意恶意代码,而且从许可的角度来看,我怀疑它是否合法!我曾经尝试过从SQL Developer获得一个xmlparserv2.jar,但这对我没有帮助。可能是由于版本的原因。但是正如您所说,是的,需要按照您所说的进行操作。请让我尝试使用您在回答中共享的墨水将此标记为答案,因为这是完整的答案。感谢使用链接+1作为答案发布。我将在尝试后尽快将此标记为答案,我也同意这是唯一的答案way@spiderman:尽管如此,请随意将链接嵌入您自己的答案中。我发现它相当完整,否则。。。