我正在按照下面的教程从存储过程中检索XMLType数据
http://docs.oracle.com/cd/B19306_01/appdev.102/b14259/xdb11jav.htm#g1039140
示例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
知道我缺少什么吗?
通过添加所需的罐子修复了问题
在类路径中需要以下三个罐,[我仍然有这些罐,由于罐的版本错误,我得到了错误]
ojdbc6.jar,xdb6.jar,xmlparserv2-11.1.1.jar
即使您有这些罐子,当包含错误版本的xmlparserv2.jar时,也可能会遇到错误。
因此,重要的是要注意这些jar的版本和兼容性。
适用于我的服务器[我的Oracle数据库版本:11.2.0.4.0]
ojdbc6.jar; 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中)
[已删除@Lukas Eder建议的第三方参考链接,谢谢]
问题内容: 我注意到以下差异,但没有在任何地方看到它的记载。我想知道其他人是否注意到了同一件事,或者可以指出一些证明相同的文档。 信封:- 场景: ojdbc14.jar :如果pl / sql返回类型为变量的变量,而我尝试将其放入java.sql.Date变量中,则一切正常。例: ojdbc6.jar :如果pl / sql返回类型为变量的变量,而我尝试将其放入java.sql.Date变量中,
问题内容: 我有一个返回记录类型的函数。 我想从Java代码中调用此函数,并在Java中获取该记录类型。请指导我如何做。谢谢 问题答案: 首先让我们从更正您的代码开始。我可以看到您发布的代码无法编译,并且会引发问题。正确的代码如下: 执行此代码时,您可能会遇到类似的问题。这是因为a 仅限在中使用。 ORA-00902:无效的数据类型 最好的方法是先创建一个对象的a 和a ,然后在您的函数中创建它:
问题内容: 嗨,我正在使用elasticsearchSpring数据。我项目的领域结构不断变化,因此我必须删除索引才能每次更改映射。为了克服这个问题,我使用了别名。我使用以下方法创建了别名: 我有一个测试课: TestRepository类: 我的问题是如何从别名而不是索引本身读取?是否对别名也进行写操作。我看过以下链接:https : //www.elastic.co/guide/en/elas
问题内容: 我绝对不知道为什么这段代码不会返回数组…我觉得我的编译器有问题: 该代码什么也不返回。这让我疯狂! 问题答案: 它正在返回数组,但是所有返回的东西(包括Array)所做的只是听起来像:返回值。在您的情况下,您将获得的值,它恰好是一个数组(可以是任何数组,您仍然会遇到此问题),然后将其放在那里。 当函数返回任何内容时,它实际上是用返回值替换调用它的行(在您的情况下:)。因此,您的方法实际
我在Java中有一个与MySQL连接的多类项目,我可以与这个SQL数据库建立连接,但当我试图将它读入数组时,它得到的是废话,而不是所请求的信息。我做错了什么? 它在sql定义下面出现了一条弯曲的线条,说它们从来没有被读取过,但我就是不明白为什么会这样!它构建得很好,可以看到数据库中有行,但它返回以下内容: 显示“java2assignment3.dvd@5e0010bc”和“java2assign
问题内容: 在过去的两年中,我一直在编写Java,现在,我开始用python(另外)进行编写。 问题是,当我查看我的Python代码时,似乎有人试图将Java代码转换为python格式,但结果却很糟糕,因为- python不是Java。 关于如何摆脱“用Python编写Java”模式的任何技巧? 谢谢! 问题答案: 您可能会考虑将自己沉浸在Python范例中。最好的方法是首先了解他们的知识,然后通