通过JDBC读取和插入XMLTYPE类型字段
package com.xxxxxxt.xxk.xmltype;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import oracle.jdbc.OracleResultSet;
import oracle.otnsamples.eis.DBConException;
import oracle.otnsamples.eis.DBException;
import oracle.sql.CLOB;
import oracle.sql.OPAQUE;
import oracle.xdb.XMLType;
/**
* -- Create table
*
* @version0.1 create table T_XMLTYPE ( C_XMLTYP xmltype ) ;
*
* @author Administrator
*
*/
public class TestXMLType {
public static void main(String[] args) {
ArrayList param = new ArrayList();
StringBuffer str = new StringBuffer("");
str.append("INSERT INTO T_XMLTYPE");
str.append("(C_XMLTYP)");
str.append("values(sys.XMLTYPE.createXML(?))");
StringBuffer xmlnews = new StringBuffer();
xmlnews
.append("<NewsItem xmlns=\"http://www.oracle.com/NewsItem.xsd\"");
xmlnews
.append(" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"");
xmlnews
.append(" xsi:schemaLocation=\"http://www.oracle.com/NewsItem.xsd ");
xmlnews.append(" http://www.oracle.com/NewsItem.xsd\">");
xmlnews.append("<title>");
xmlnews.append("标题");
xmlnews.append("</title>");
xmlnews.append("<description>");
xmlnews.append("描述");
xmlnews.append("</description>");
xmlnews.append("<entered_date>");
xmlnews.append("录入日期");
xmlnews.append("</entered_date>");
xmlnews.append("<expiry_date>");
xmlnews.append("过期日期");
xmlnews.append("</expiry_date>");
xmlnews.append("<imagepointer>");
xmlnews.append("图像");
xmlnews.append("</imagepointer>");
xmlnews.append("<typeid>");
xmlnews.append("类型");
xmlnews.append("</typeid></NewsItem>");
param.add(xmlnews.toString());
// 测试插入新项目
TestXMLType xmltest = new TestXMLType();
try {
xmltest.insertItem(str.toString(), param);
} catch (Exception e) {
e.printStackTrace();
}
try {
ArrayList aList = xmltest.editItem(
"SELECT C_XMLTYP FROM T_XMLTYPE WHERE ROWNUM = 1", null);
System.out.println(aList.get(0));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 插入新项目
*
* @param query
* @param params
* @throws Exception
*/
public void insertItem(String query, ArrayList params) throws Exception {
CLOB clob = null;
// Initialize statement Object
PreparedStatement pstmt = null;
Connection con = null;
try {
con = getConnection();
pstmt = con.prepareStatement(query);
if (params != null) {
for (int i = 0; i < params.size(); i++) {
clob = this.getCLOB((String) params.get(i), con);
pstmt.setObject((i + 1), clob);
}
}
pstmt.execute();
pstmt.close();
} finally {
if (pstmt != null) {
pstmt.close();
}
if (clob != null) {
freeCLOB(clob);
}
releaseConnection(con);
}
}
/**
* 读取内容
*
* @param query
* @param params
* @return
* @throws Exception
*/
public ArrayList editItem(String query, ArrayList params) throws Exception {
Connection con = null;
ResultSet rs = null;
ArrayList data = new ArrayList();
try {
con = getConnection();
PreparedStatement pst = con.prepareStatement(query);
if (params != null) {
for (int i = 0; i < params.size(); i++) {
pst.setObject(i + 1, params.get(i));
}
}
rs = pst.executeQuery();
while (rs.next()) {
OracleResultSet ors = (OracleResultSet) rs;
OPAQUE op = ors.getOPAQUE(1);
XMLType xml = XMLType.createXML(op);
data.add(xml.getStringVal());
}
pst.close();
return data;
} catch (Exception e) {
throw e;
} finally {
releaseConnection(con); // Releases the connection
}
}
/**
* 释放临时CLOB文件
*
* @param clob
* @throws DBException
*/
private void freeCLOB(CLOB clob) throws DBException {
try {
clob.freeTemporary();
} catch (SQLException sqlexp) {
throw new DBException(sqlexp.getMessage());
}
}
/**
* 释放连接
*
* @param conn
* @throws DBConException
*/
private void releaseConnection(Connection conn) throws Exception {
try {
if (conn != null || !conn.isClosed()) {
conn.close();
}
} catch (SQLException ex) {
throw new Exception("不能关闭数据库连接。" + ex.getMessage());
}
}
/**
* 获取连接
*
* @return
* @throws Exception
*/
private Connection getConnection() throws Exception {
String user = "DSS_SYYB";
String password = "DSS_SYYB";
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.131.229:1521:orcl";
Connection c = null;
Class.forName(driver).newInstance();
c = DriverManager.getConnection(url, user, password);
return c;
}
/**
* 获取CLOB数据类型
*
* @param clobData
* @param conn
* @return
* @throws Exception
*/
private CLOB getCLOB(String clobData, Connection conn) throws Exception {
CLOB tempClob = null;
try {
// 创建新的临时CLOB
tempClob = CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION);
// 以读写模式打开临时CLOB
tempClob.open(CLOB.MODE_READWRITE);
// 获取输出流用来写入
Writer tempClobWriter = tempClob.getCharacterOutputStream();
// 将字符数据写到临时clob中
tempClobWriter.write(clobData);
// 刷新和关闭
tempClobWriter.flush();
tempClobWriter.close();
// 关闭临时clob
tempClob.close();
return tempClob;
} catch (Exception exp) {
tempClob.freeTemporary();
throw new Exception("Exception thrown in getCLOB method "
+ "of DBBroker class of given status : " + exp.getMessage());
}
}
}
遇到的问题
java.lang.NoSuchMethodError: oracle.jdbc.internal.OracleConnection.getProtocolType()Ljava/lang/String;
此问题是由于JDBC驱动的问题造成的,使用与数据库相对应的JDBC驱动。
还需要导入xdb.jar和xmlparserv2.jar这两个包。
OracleTypes.OPAQUE类型是一种用户定义的抽象类型,用来匹配XMLTYPE这种类型。
分享到:
相关推荐
java中xml文件的处理及oracle中xmltype的插入和读取.pdf
XMLType是Oracle支持的一种基于XML格式存储的数据类型,这里我们共同来探究Java使用JDBC或MyBatis框架向Oracle中插入XMLType数据的方法:
oracle数据库xmltype类型解析使用的jar包,xdb6.jar、xmlparserv2.jar
oracle解析XMLTYPE字段里面节点值,并用PL/SQL将查询结果导出为excel
。。。
oracle操作xmltype
一个表有一个字段为xml_col是xmltype类型,应用jdbc从数据库中查询到xml_c并取出
2.1.1创建一个有XMLType类型字段的表: create table xmlcontent (keyvalue varchar2(10) primary key, xmlvalue xmltype); 2.1.2创建一个XMLType类型表 create table xmltable of xmltype; 2.1.3从XML文件中...
oracle xmltype 类型 jdbc 的相关jar包 包含 ojdbc8.jar orai18n.jar xdb6.jar xdb.jar xmlparserv2.jar
XMLtype 是一个基于控制台的 UTF-8 编码的面向 XML 文档的文件的编辑器。 它从一开始就设计用于多语言使用,甚至用于编写双向文本(例如混合英语和希伯来语)。
6.7查看和编辑XMLTYPE 6.8直接查询导出 6.9保存SQL脚本 6.10创建标准查询 7命令窗口 7.1输入SQL语句和命令 7.2开发命令文件 7.3支持命令 8创建与修改非PL/SQL对象(因篇幅限制下面2级目录省略) 9图标 10报告...
XMLTYPE_instance:XML数据类型的字段,用于保存XML ,XPath_string:操作的节点路径,例如:/info/Owner。 绝对路径与相对路径:区别在于路径字符串最前面的斜杠是否存在,有斜杠代表绝对路径,没有斜杠则是相对路径...
XMLType.XSD_STRING,//参数类型:String ParameterMode.IN); //参数模式:'IN' or 'OUT' call.addParameter("arg1", //参数名 XMLType.XSD_STRING,//参数类型:String ParameterMode.IN); //参数模式:'IN'...
Oracle官方文档 介绍Oracle XML 相关内容,注意此文档...包括 在ORACLE通过相关函数解析XML 如:xmltype、extract 、EXISTSNODE、EXTRACTVALUE等 案例多,这本手册适合需要在Oralce数据库里解析和处理xml 的同学学习。
Oracle P/L SQL实现FTP上传、下载功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 --Oracle上的FTP功能 Create or Replace Package UTL_FTP AUTHID CURRENT_USER as ...
/// <param name="xmlType">XML资源类型 /// ///赵洪 /// /// /// 获取一个字符串xml文档中的ds /// /// 含有xml信息的字符串 /// /// 读取XML资源到DataTable中 /// /// <param name="source">XML...
xml 解析方式有四种--DOM 、SAX、JDOM、DOM4J。