1. 程式人生 > >【java】xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫

【java】xml檔案表建立及讀取環境搭建並採用DOM4J完成XML檔案匯入到資料庫

    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語句裝載到一起,然後一次送到資料庫執行,減少了資料的傳輸時間,執行只需要很短的時間,提高資料互動的效率。