spi*_*man 3 java oracle stored-procedures xmltype
我按照以下教程从存储过程中检索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
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
.............
// 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();
}
Run Code Online (Sandbox Code Playgroud)
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
);
Run Code Online (Sandbox Code Playgroud)
罐包括:ojdbc6.jar,xdb.jar
知道我错过了什么吗?
此问题已得到解决.但是当部署在JBoss服务器上时,另一个问题 - 如果您有任何想法请参考此处 - 在jboss中部署应用程序时出现Xmlparserv2错误,在JBoss for Java Web应用程序中安装Oracle ojdbc模块
spi*_*man 13
通过添加所需的罐子来解决问题
在类路径中需要以下三个罐子,[我还有这些罐子,由于罐子的错误版本我得到了错误]
ojdbc6.jar,xdb6.jar,xmlparserv2-11.1.1.jar
即使你有这些罐子,当我包含错误版本的xmlparserv2.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建议的第三方参考链接,谢谢你]
xmlparserv2.jar在各种Oracle产品中有一个分布,其中包括SQL Developer(在sqldeveloper\modules\oracle.xdk_12.1.2中).
当然,我不知道你是否允许从SQL Developer中提取该jar,许可证是明智的.
| 归档时间: |
|
| 查看次数: |
15077 次 |
| 最近记录: |