![](/img/trans.png)
[英]How can I pass a BLOB type data (ByteArray) through OSB(Oracle Service Bus) to DB(Table in a Data Base with BLOB type Column)
[英]Java: How do I parse XML Type Column Data from Oracle DB Table?
我正在尝试接收一列Oracle数据类型为XMLType的列
我搜寻了几种资源,它们都使我从Oracle获得了以下jar:
ojdbc8.jar xdb6.jar,最后是xmlparserv2.jar
OraclePreparedStatement stmt = (OraclePreparedStatement) connection.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
XMLType poxml = (XMLType)rs.getObject("XML_DATA");//breaks here
String poString = poxml.getStringVal();
}
首先,它声称不赞成使用getStringval()。 更令人担忧的是,当我最终获得xmlparserv2.jar时,会出现以下错误,该错误使该应用程序无法启动:
org.xml.sax.SAXNotRecognizedException: SAX feature 'http://apache.org/xml/features/allow-java-encodings' not recognized.
oracle.xml.jaxp.JXSAXParserFactory.setFeature(JXSAXParserFactory.java:260)
这些Java和Oracle DB是否肯定有一种协同工作的方式? 他们都属于同一家公司。
有几种方法可以从oracle db-获取XMLType数据
请尝试以下代码:
OraclePreparedStatement stmt = (OraclePreparedStatement)
conn.prepareStatement("select e.poDoc from po_xml_tab e");
ResultSet rset = stmt.executeQuery();
OracleResultSet rs = (OracleResultSet) rset;
while(rs.next())
{
XMLType poxml = XMLType.createXML(rs.getOPAQUE("column_name"));
Document podoc = (Document)poxml.getDOM();
//convert document object to string
String xmlString =getStringFromDocument(podoc)
}
-----------------------------------------------------------------------------
//method to get String from Document
private String getStringFromDocument(Document doc)
{
try
{
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, result);
return writer.toString();
}
catch(TransformerException ex)
{
ex.printStackTrace();
return null;
}
我弄清楚了如何从结果集中提取XML类型:
首先,我从Oracle获得了以下JAR:
ojdbc8.jar
xdb6.jar
xmlparserv2.jar-我需要做一些挖掘才能找到这个jar(不幸的是,我没有可用的源。我记得必须获得一个.zip文件,该文件被埋在几个文件夹中)
我在Intellij的项目目录中创建了一个lib文件夹(与src文件夹处于同一级别)
。 我将它们添加到Maven中,手动执行以下操作:
<dependency>
<groupId>com.oracle</groupId>
<artifactId>xdb</artifactId>
<version>6</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/xdb6.jar</systemPath>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc</artifactId>
<version>8</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ojdbc8.jar</systemPath>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>xmlparserv</artifactId>
<version>2</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/xmlparserv2.jar</systemPath>
</dependency>
我通过转到Project Structure-> Artifacts将罐子手动添加到Artifact中(不知道是否有其他方法来进行此操作?),然后将它们添加到我的war文件中(右键单击并说“添加到/ WEB-INF”)
从那里,代码可能看起来像这样:
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
XMLType poxml = (XMLType) rs.getObject("XML_DATA");
String sDMPayload = poxml == null ? null : poxml.getStringVal();
}
我将其转换为字符串,因为稍后我会将XML反序列化为对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.