解析數據庫生成XML文件及解析XML文件插入數據庫

package com.sql.xml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
//導出數據存入XML
public class ReadDb {
	public static void main(String args[]){
		       //連接數據庫
		try{
			   //數據庫連接
			   String url="jdbc:oracle:thin:@10.0.3.18:1521:hxtest18";
			   String classforname="oracle.jdbc.driver.OracleDriver";
			   String usename="zhiyong"; 
			   String password="password";
			   Class.forName(classforname);
			   Connection con=DriverManager.getConnection(url,usename,password);
			   Statement sta=con.createStatement();
			   //查詢數據
			   ResultSet result=sta.executeQuery(
				"SELECT * FROM study");
		       //創建根節點
			   Document document=DocumentHelper.createDocument();
			   Element studyInfo=DocumentHelper.createElement("studyInfo");
			   document.setRootElement(studyInfo);
			   //Element studyInfo=document.addElement("studyInfo");
			   //當有值時查詢
			   while(result.next()){
				   //增加每個節點
			   Element study=studyInfo.addElement("study");
			   Element id=study.addElement("id");
			   Element student=study.addElement("student");
			   Element classe=study.addElement("class");
			   Element teacher=study.addElement("teacher");
			   Element age=study.addElement("age");
			   //將數據庫值通過SETTEXT爲XML值
			   id.setText(result.getString("id"));
			   student.setText(result.getString("student"));
			   //System.out.println(id.getText());
			   classe.setText(result.getString("class"));
			   teacher.setText(result.getString("teacher"));
			   age.setText(result.getString("age"));
			   }
			   			 //將樹導出到文件中:兩種輸出方法
			    XMLWriter write=new XMLWriter(new FileOutputStream(new File("studyInfo.xml")));
				write.write(document);
				write.close();
							  									
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}
 
插入數據庫,改了幾個條件
bookstore.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
	<book has="100">
		<bname>數據庫</bname>
		<price>33.80元</price>
		<date>2009-10-1</date>
	</book>
	<book has="95">
		<bname>三國演義</bname>
		<price>40.00元</price>
		<date>2005-1-7</date>
	</book>
	<book has="86">
		<bname>西遊記</bname>
		<price>30.00元</price>
		<date>2004-3-8</date>
	</book>
	<cd have="15">
		<id>1</id>
		<cname>beyound</cname>
		<owner>小黎</owner>
	</cd>
	<cd have="17">
		<id>2</id>
		<cname>kugou</cname>
		<owner>小強</owner>
	</cd>
</bookstore>

解析如下
package com.sql.xml;
import java.io.File;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Iterator;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.io.OutputFormat;

//XML的解析與轉換後存入數據庫
public class Fenkai {
	public static void main(String args[]){
		String sql,BNAME=null,PRICE=null,DAT=null;//定義數據庫表段
		String sqlatt,CNAME=null,ID=null,OWNER=null;
		//讀取xml文件
		SAXReader reader=new SAXReader();
		File file=new File("bookstore.xml");
		   try{
			   //數據庫連接
			   String url="jdbc:oracle:thin:@10.0.3.18:1521:hxtest18";
			   String classforname="oracle.jdbc.driver.OracleDriver";
			   String usename="zhiyong"; 
			   String password="password";
			   Class.forName(classforname);
			   Connection con=DriverManager.getConnection(url,usename,password);
			   //解析xml文件
			   Document document=reader.read(file);
			   Element root=document.getRootElement();//根節點
			   System.out.println("輸出根節點:"+root.getName());
			   //下面用迭代得到子節點和孫節點
			   for(Iterator child=root.elementIterator();child.hasNext();){
				   Element childEle=(Element)child.next();
				   System.out.println("子:"+childEle.getName());
				   System.out.println("孫:");
				   for(Iterator grand=childEle.elementIterator();grand.hasNext();){
					   Element grandEle=(Element)grand.next();
					   System.out.println(grandEle.getName()+"值:"+grandEle.getText());
					   //轉換數據
					   while(grandEle.getText().equals("數據庫")){
						   grandEle.setText("001");
					   }
					   while(grandEle.getText().equals("三國演義")){
						   grandEle.setText("002");
					   }
					   while(grandEle.getText().equals("西遊記")){
						   grandEle.setText("003");
					   }
					   while(grandEle.getText().equals("beyound")){
						   grandEle.setText("004");
					   }
					   while(grandEle.getText().equals("kugou")){
						   grandEle.setText("005");
					   }
					  
				   }}
				 //得到各節點值插入數據庫
			         
				   for(Iterator it= root.elementIterator("book");it.hasNext();){
					   Element ch=(Element)it.next();
				   BNAME=ch.elementText("bname");
				   PRICE=ch.elementText("price");
				   DAT=ch.elementText("date");
				   
				  // while(childEle.getName().equals("cd")){}
				   
				   sql="insert into book values('"+BNAME+"','" +PRICE
				   		+"','"+DAT+"')";
				   //sql="select * from book";//加入本語句運行不改變數據表
				   //執行
				   con.createStatement().executeUpdate(sql);} 
				   for(Iterator itt= root.elementIterator("cd");itt.hasNext();){
					   Element cht=(Element)itt.next();
				   CNAME=cht.elementText("cname");
				   ID=cht.elementText("id");
				   OWNER=cht.elementText("owner");
				   sqlatt="insert into cd values('"+CNAME+"','" +ID
			   		+"','"+OWNER+"')";
				   //sqlatt="select * from cd";
				   con.createStatement().executeUpdate(sqlatt);} 	     
			   
			 //將轉換後文件存入txt
			   OutputFormat format=OutputFormat.createPrettyPrint();
			   format.setEncoding("gbk");
			   XMLWriter writer = new XMLWriter( new FileWriter(new File("bookchange.txt")),format);
				writer.write(document);
				writer.close();
			   System.out.println(document.asXML());//打印改變後的樹
		   }catch(Exception e){
			   e.printStackTrace();
			   System.out.println("有錯啊!");
		   }
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章