【java】xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫
阿新 • • 發佈:2019-01-04
java一種簡單的解析xml方法是用DOM進行解析, dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的,dom4j用於處理xml是很常用的技術,本篇部落格介紹xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫。
1.XML檔案
2.根據xml檔案建表
表名:T_XML
欄位:
使用PD建好表之後點選database選擇database Generation匯出為sql指令碼
3.使用PL/SQL匯入sql指令碼
(1)選擇指令碼所在資料夾
(2)執行指令碼
這樣重新整理就可以看到這張表了。
4.讀取環境搭建
需要注意的是我們需要把dom4j用於處理xml是很常用的技術,把lib中的檔案引入到classpath中
5.採用DOM4J完成XML檔案匯入到資料庫
(1)資料庫配置公共類DbUtil類部分:
package com.bjpowernode.xml; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.bjpowernode.drp.util.JdbcConfig; import com.bjpowernode.drp.util.XmlConfigReader; /** * 封裝資料常用操作 * @author www * */ public class DbUtil { /** * 取得Connection * @return */ public static Connection getConnection() { Connection conn = null; try { JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig(); Class.forName(jdbcConfig.getDriverName()); conn = DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } //關閉資料庫連線 public static void close(Connection conn) { if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } //關閉PreparedStatement public static void close(Statement pstmt) { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } } //關閉資料庫連線 public static void close(ResultSet rs ) { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } } //事務開始前的準備工作,設定為手動提交 public static void beginTransaction(Connection conn) { try { if (conn != null) { if (conn.getAutoCommit()) { conn.setAutoCommit(false); //手動提交 } } }catch(SQLException e) {} } //提交事務 public static void commitTransaction(Connection conn) { try { if (conn != null) { if (!conn.getAutoCommit()) { conn.commit(); } } }catch(SQLException e) {} } //回滾事務 public static void rollbackTransaction(Connection conn) { try { if (conn != null) { if (!conn.getAutoCommit()) { conn.rollback(); } } }catch(SQLException e) {} } //重置資料庫連線,恢復到原來狀態 public static void resetConnection(Connection conn) { try { if (conn != null) { if (conn.getAutoCommit()) { conn.setAutoCommit(false); }else { conn.setAutoCommit(true); } } }catch(SQLException e) {} } public static void main(String[] args) { System.out.println(DbUtil.getConnection()); } }
(2)TestXMLImport類
TestXMLImport類用於讀取XML檔案中的資訊,並寫入資料庫表中
package com.bjpowernode.xml; import java.io.File; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class TestXMLImport { /* * @param args */ public static void main(String[] args){ String sql="insert into T_XML(NUMERO,REPOSICION,MOMBRE,TURNOS) values(?,?,?,?)"; Connection conn = null; PreparedStatement pstmt = null; try { conn =DbUtil.getConnection(); pstmt =conn.prepareStatement(sql); //找到需要讀取的XML檔案的位置 Document doc = new SAXReader().read(new File("G:/1.計算機/韋文文/DRP/test_xmlImport/xml/test01.XML")); //提取XML檔案中指定節點的內容 List itemList = doc.selectNodes("/ACCESOS/item/SOCIO"); for (Iterator iter = itemList.iterator();iter.hasNext();){ Element el =(Element)iter.next(); String numero = el.elementText("NUMERO"); String reposicion = el.elementText("REPOSICION"); String nombre = el.elementText("NOMBRE"); List turnosList=el.elements("TURNOS"); StringBuffer sbString = new StringBuffer(); for(Iterator iter1=turnosList.iterator();iter1.hasNext();){ Element turnosElt=(Element)iter1.next(); String lu = turnosElt.elementText("LU"); String ma = turnosElt.elementText("MA"); String mi = turnosElt.elementText("MI"); String ju = turnosElt.elementText("JU"); String vi = turnosElt.elementText("VI"); String sa = turnosElt.elementText("SA"); String doo = turnosElt.elementText("DO"); sbString.append(lu+","+ma+","+mi+","+ju+","+vi+","+sa+","+","+doo); } pstmt.setString(1, numero); pstmt.setString(2, reposicion); pstmt.setString(3, nombre); pstmt.setString(4, sbString.toString()); //把這條執行語句加到PreparedStatement物件的批處理命令中 pstmt.addBatch(); } //把以上新增到批處理命令中的所有命令一次過提交給資料庫來執行 pstmt.executeBatch(); System.out.println("將XML匯入資料庫成功!"); } catch (Exception e) { e.printStackTrace(); }finally{ DbUtil.close(pstmt); DbUtil.close(conn); } } }
6.總結
(1)XPath即為XML路徑語言,它是一種用來確定XML文件中某部分位置的語言。XPath基於XML的樹狀結構,提供在資料結構樹中找尋節點的能力。
(2)採用pstmt.addBatch(),把若干sql語句裝載到一起,然後一次送到資料庫執行,減少了資料的傳輸時間,執行只需要很短的時間,提高資料互動的效率。