XMLType是oracle數據庫特有的數據類型可以用來存儲一段xml,通過java(本文使用jdbc)插入XMLType根據sql中參數的類型通常有以下3種方法:
本文使用的數據庫為oracle10.2.1
一、String,客戶端只需傳遞一個字符串參數,創建xmltype的任務完全交給數據庫,此方法數據庫的壓力最大
String sql = "insert into xmltable (XML)
values(sys.xmlType.createXML(?))";
String xmldata = "This is
an XML fragment";
ps.setString(1, xmldata);
ps.executeUpdate();
二、CLOB,在客戶端創建好CLOB傳入數據庫端通過oracle數據庫的XMLTYPE()函數構造成XMLType類型的值,此方法客戶端和數據庫端同時承擔了創建xmltype的任務,因此數據庫的壓力居中
Connection conn = ... ;//獲得Connection
PreparedStatement ps = ...;//獲得PreparedSatement
String sql = "insert into xmltable (XML)
values(XMLType(?))";
String xmldata = "This is
an XML fragment";
//通過conn創建CLOB
CLOB tempClob = CLOB.createTemporary(conn, false,
CLOB.DURATION_SESSION);?//打開CLOB
tempClob.open(CLOB.MODE_READWRITE);
//獲得writer
Writer clobWriter = clob.setCharacterStream(100);
//寫入數據
clobWriter.write(xmldata);?//刷新
clobWriter.flush();
//關閉writer
clobWriter.close();
//關閉CLOB
tempClob.close();
ps.setObject(1, tempClob);
ps.executeUpdate();
三、XMLType,客戶端傳遞一個XMLType給數據庫,此方法將創建xmltype的任務完全交給了客戶端,因此數據庫的壓力最小
Connection conn = ... ;//獲得Connection
PreparedStatement ps = ...;//獲得PreparedSatement
String sql = "insert into xmltable (XML) values(?)";
String xmldata = "This is an
XML fragment";
//創建一個XMLType對象
XMLType xmltype = XMLType.createXML(conn, xmldata);
ps.setObject(1, xmltype);
ps.executeUpdate();
以上三種方法通過插入20萬條數據測試比較發現:
第一種方法:耗時最短,服務器cpu消耗最大
第二種方法:耗時最長,服務器cpu消耗居中
第三種方法:耗時居中,服務器cpu消耗最小