Java:从StoredProcedure返回XMLType数据,使用ojdbc6.jar xdb6.jar xmlparserv2.jar进行Java到PLSQL的交互 [英] Java: Returning XMLType Data from StoredProcedure, Usage of ojdbc6.jar xdb6.jar xmlparserv2.jar for Java to PLSQL interaction

查看:204
本文介绍了Java:从StoredProcedure返回XMLType数据,使用ojdbc6.jar xdb6.jar xmlparserv2.jar进行Java到PLSQL的交互的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am following the below tutorial to retrieve XMLType data from a stored procedure

http://docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb11jav.htm#g1039140
示例13-4 XMLType Java:返回XMLType数据

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

When I run the code, I get this error,

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
   );

包括的罐子:ojdbc6.jar,xdb.jar

Jars included: ojdbc6.jar, xdb.jar

知道我缺少什么吗?

此问题已解决。但是当部署在JBoss服务器上时,另一个问题 - 如果你有任何想法,请参考这里 - 在jboss中部署应用程序时出现Xmlparserv2错误,在JBoss for Java Web应用程序中安装Oracle ojdbc模块

This issue is resolved. But when deployed in JBoss server, another issue - please refer here if you have any ideas - Xmlparserv2 error while application deployed in jboss, Installing Oracle ojdbc module in JBoss for Java web application

推荐答案

问题已解决通过添加所需的罐子

Issue fixed by adding the required jars

在类路径中需要以下三个罐子,[我还有这些罐子,因为罐子的版本错误而得到错误]

Needed the following three jars in the classpath, [I had these jars still, I was getting error due to wrong versions of the jar]

ojdbc6.jar,xdb6.jar,xmlparserv2-11.1.1.jar

即使你有这些罐子,你也可能会遇到错误,就像我在包含错误版本的xmlparserv2.jar时所得到的那样。

Even if you have these jars, you might get error like I was getting when I was including a wrong version of xmlparserv2.jar.

所以要注意的重要事项是这些罐子的版本和兼容性。

So Important thing to take care is the version and compatibility of these jars.

适用于我的[我的Oracle数据库版本:11.2.0.4.0]

The ones that worked for me [My Oracle DB version : 11.2.0.4.0]

ojdbc6 。罐; xdb6.jar:

http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

xmlparserv2-11.1.1.jar
可在此处获取:( SQL Developer )(在sqldeveloper\modules\oracle.xdk_12.1.2中)

xmlparserv2-11.1.1.jar available here: ( SQL Developer ) (in sqldeveloper\modules\oracle.xdk_12.1.2)

[删除了@Lukas Eder建议的第三方参考链接,谢谢你们。

[removed third party reference link as advised by @Lukas Eder, Thanks for that]

这篇关于Java:从StoredProcedure返回XMLType数据,使用ojdbc6.jar xdb6.jar xmlparserv2.jar进行Java到PLSQL的交互的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆