【java web】--ojdbc匯入xml資料

ZeroWM發表於2016-01-22

  我們存取資料,常用的是從jsp頁面獲取資料,通過控制元件觸發事件,傳值到後臺,持久化到資料庫。最近學了一種特別好玩的新的,就是把資料以xml檔案的形式,匯入到資料庫中。實現效果就是將如下的xml檔案的節點資料,通過java程式碼,直接匯入到已經建立好的T_XML資料表中。





一、程式碼目錄結構

DbUtil.java : 連線資料庫的工具類

TestXMLImport.java :    程式臺程式碼

dom4j-1.6.1.jar : dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案

jaxen-1.1-beta-6.jar : Jaxen是一個Java編寫的開源的XPath庫。這是適應多種不同的物件模型,包括DOM,XOM,dom4j和JDOM。也可以作為介面卡,轉換Java位元組程式碼或XML的Java bean為xml,可以使用XPath查詢這些樹。

ojdbc14.jar :  ojdbc是oracle資料庫提供的thin驅動

test01.XML :  匯入的xml資料檔案



二、程式碼詳情

TestXMLImport.java 

package test_xmlImport;

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.Element;
import org.dom4j.io.SAXReader;


/**
 * @ClassName:TestXMLImport
 * @Description:TODO
 * @author wm
 * @date 2016年1月22日上午8:48:46
 */
public class TestXMLImport {

	public static void main(String[] args){
		String sql="insert into T_XML(NUMERO,REPOSICION,NOMBRE,TURNOS)values(?,?,?,?)";
		Connection conn=null;
		PreparedStatement pstmt=null;
		try {	
			conn=DbUtil.getConnection();
			pstmt=conn.prepareStatement(sql);
			
			//建立解析器,讀取xml並賦值給文件
			Document doc=	new SAXReader().read(new File("D:/MyEclipse2014--wm/workspacewm/test_xmlImport/xml/test01.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空物件,執行緒安全
				StringBuffer sbString=new StringBuffer();
				//遍歷turnosList下面的子標籤,並獲取文字,拼接
				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);
				}
				//繫結sql,插入條件,執行sql語句
				pstmt.setString(1, numero);
				pstmt.setString(2, reposicion);
				pstmt.setString(3, nombre);
				//建立新的String物件
				pstmt.setString(4, sbString.toString());
				//批量新增到資料庫
				pstmt.addBatch();
				
			}
			//批量執行更新到資料庫
			pstmt.executeBatch();
			System.out.println("將XML匯入資料庫成功!");
		} catch (Exception e) {
			e.printStackTrace(); 
		}finally{
			DbUtil.close(pstmt);
			DbUtil.close(conn);
		}
	}

}


DbUtil.java

package test_xmlImport;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;


public class DbUtil {
		
	
public static Connection getConnection(){
		
		Connection conn=null;
		try{
			
			Class.forName("oracle.jdbc.driver.OracleDriver");
			String url="jdbc:oracle:thin:@localhost:1521:orcl";
			String username="drp1";
			String password="drp1";
			conn=DriverManager.getConnection(url,username,password);
			
		}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) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}	
	
	
	public static void close(Statement pstmt){
		if(pstmt!=null){
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	
}


三、除錯小技巧-Expressions

除錯的過程中,可以通過新增表示式,可以檢視某節點的屬性值。

Expressions View

右鍵Add Watch Expressions


輸入變數get屬性

http://write.blog.csdn.net/postedit


四、總結

 

優點

缺點

程式碼結構:

可讀性好,

結構嚴謹,

簡單,

搜尋效率高

插入修改難,

資料量大的時候轉換成二進位制影響效率,

對資料的管理不夠完善

 

對外互動:

平臺間資料交換、與資料庫互動方便,

可以選擇性更新

平臺間通訊規範需要定義

物件導向:

資料顯示分離

 



相關文章