Java读取Oracle数据库并解析成XML文件

<pre class="java" name="code"><pre name="code" class="html">

 
 
package com.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
	//数据库驱动对象
	public static final String DRIVER="oracle.jdbc.driver.OracleDriver";
	//数据库连接地址(数据库名)
	public static final String URL="jdbc:oracle:thin:@192.168.110.2:1521:oraplan";
	//登陆名
	public static final String NAME="supplan";
	//登陆密码
	public static final String PWD="plansup";
	
	private static  Connection conn =null ; //连接实例
	
	/*******************单例模式的应用开始***************************/
	private static  DBConnection DBInstance = new DBConnection(); //数据库类实例:单例模式第一步
	//私有的构造方法:单例模式第二步
	private DBConnection(){
		try {
			Class.forName(DRIVER); //注册驱动
			conn = DriverManager.getConnection(URL,NAME,PWD); //获取连接
		} catch (ClassNotFoundException e) {
			System.out.println("找不到指定文件!"); //找不到驱动包
			e.printStackTrace();
		}catch(SQLException e){ //连接数据库时报异常
			e.printStackTrace();
		}
	}
	
	//获取实例:单例模式第三步
	public static DBConnection getInstance(){
		return DBInstance;
	}
	/*******************单例模式的应用结束***************************/
	
	//获取连接
	public Connection getConn(){
		return conn;
	}
	
	//测试
	public static void main(String[] agrs){
		Connection conn = DBConnection.getInstance().getConn();
		if(conn!=null){
			System.out.println("数据库连接成功2");
		}else{
			System.out.println("数据库连接失败");
		}
	}
}
 
2.建立实例类
package com.util;

import java.util.Date;

public class WorkRecord {
	private String com_id;//公司编号
	private String ID;//编号
	private String content;//日记内容
	private String clock; //时间
	private String YH_ID;//用户编号
	public String getCom_id() {
		return com_id;
	}
	public void setCom_id(String com_id) {
		this.com_id = com_id;
	}
	public String getID() {
		return ID;
	}
	public void setID(String iD) {
		ID = iD;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getClock() {
		return clock;
	}
	public void setClock(String clock) {
		this.clock = clock;
	}
	public String getYH_ID() {
		return YH_ID;
	}
	public void setYH_ID(String yH_ID) {
		YH_ID = yH_ID;
	}
	
}
3.
数据库查询:JDBC全查
package com.CRUD;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.dao.impl.DOMImpl;
import com.util.DBConnection;
import com.util.WorkRecord;

public class CRUDImpl {
	private Connection conn=null;
	private PreparedStatement pst=null;
	private ResultSet rs=null;
	
	//全查
	public List<WorkRecord> findAll(){
		List<WorkRecord> recordList = new ArrayList<WorkRecord>(); //创建List实例
		WorkRecord record=null;
		try {
			String sql = "select * from TEST_XML";//sql语句
			conn = DBConnection.getInstance().getConn();//建立连接
			pst = conn.prepareStatement(sql);//发送sq命令并进行预编译
			rs = pst.executeQuery();//实行sql命令并返回结果集
			while(rs.next()){ //如果rs.next()为true,说明结果集中有值,也就需要进行遍历了
				record = new WorkRecord();
				record.setCom_id(rs.getString(1)); //第一列
				record.setID(rs.getString(2));
				record.setContent(rs.getString(3));
				//
				record.setClock(rs.getString(4));
				//record.setClock(new DOMImpl().dateToString(rs.getDate(4))); //数据库中此列的数据为Date类型,WorkRecord中的是String类型的
				record.setYH_ID(rs.getString(5));
				recordList.add(record);//将对象添加到list中
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return recordList; //返回结果
	}
	
}
 

4.生成和解析XML文档

package com.dao.impl;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.dom4j.Attribute;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

import com.CRUD.CRUDImpl;
import com.util.WorkRecord;

/**
 * DOM生成和解析XML文档
 * */

public class DOMImpl {
	private Document document;
	private DocumentBuilder builder;
	/**
	 * 初始化
	 * */
	public void init() {
		try {
			DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();//创建解析工厂实例
			builder = builderFactory.newDocumentBuilder(); //创建解析器实例
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 创建XML
	 * @param fileName 文件路径名称
	 * */
	public  void creatXML(String fileName) {
		CRUDImpl CRUD = new CRUDImpl(); //实例化
		List<WorkRecord> recordList = CRUD.findAll(); //查询结果
		
		this.document = builder.newDocument();//实例化document对象
		
		//是否呼叫外部文件,此处设置为true,表示此文件独立,不需要呼叫外部文件,也就是不需要导入外部的dtd文件
		this.document.setXmlStandalone(true);
		
		this.document.setXmlVersion("1.0");//版本号
		
		Element menu_config = this.document.createElement("menu-config"); //创建根目录
		Element menu = this.document.createElement("menu");//创建menu
		
		for(int i=0;i<recordList.size();i++){ //遍历menu,读取其下的子节点
			Element first_item = this.document.createElement("first-item"); //创建first-item
			
			//创建first-item下面的子节点second-item
			for(int h=0;h<recordList.size();h++){ //遍历first-item,读取其下的子节点
			Element second_item = this.document.createElement("second-item");
			
				for(int j=0;j<recordList.size();j++){ //遍历second-item,读取其下的子节点
					//创建second-item下面的子节点third-item
					Element third_item = this.document.createElement("third-item");
					
					for(int g=0;g<recordList.size();g++){ //遍历third-item,读取其下的子节点
						third_item.setAttribute("text", "text");
						third_item.setAttribute("onclick", "onclick");
						third_item.setAttribute("permcode", "permcode");
					}
					
					second_item.appendChild(third_item);
					second_item.setAttribute("text", "text");
				}
		
			
			//将各节点添加到父节点:将second_item,image,swapimage添加到first_item上,建立跟first_item之间的父子关系
			first_item.appendChild(second_item);
			//first_item.setAttribute("name", "name");
			first_item.setAttribute("image", recordList.get(i).getContent());
			first_item.setAttribute("swapimage", recordList.get(i).getClock());
			
		}
			
			//将first_item添加到menu上
			menu.appendChild(first_item);
			 //name="test"  image="arrows.gif" menuheight="33"
			menu.setAttribute("name", "test");
			menu.setAttribute("image", "arrows.gif");
			menu.setAttribute("menuheight", "33");
		
		}
		
		menu_config.appendChild(menu);//将menu追加到menu_config上面
		this.document.appendChild(menu_config);//将menu_config追加到document的子节点
		
		try {
			TransformerFactory tf = TransformerFactory.newInstance();//创建工厂
			
			Transformer transformer = tf.newTransformer();//transformer对象
			
			DOMSource source = new DOMSource(document);//创建DOMSource对象并封装document对象
			
			transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312");//编码
			
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");//是否缩进
			
			PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));//创建输出对象,输出到fileName中
			
			//FileOutputStream pw = new FileOutputStream(new File(fileName));
			
			//当用TransformerFactory来更新xml时,要生成一个StreamResult,而StreamResult   result=new   StreamResult(params)中的params要的是OutputStream
			StreamResult result = new StreamResult(pw);
			
			transformer.transform(source, result);//调用transformer方法进行转换
			
			System.out.println("XML文件生成成功!");
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			System.out.println("文件路径处");
			e.printStackTrace();
		} catch (TransformerException e) {
			System.out.println("转换时");
			e.printStackTrace();
		}
	}
public void parseXML(String fileName) {
		try {
			this.document = builder.parse(fileName);//指定解析的文件
			
			NodeList root = document.getChildNodes();//获取根目录
			for(int i=0;i<root.getLength();i++ ){
				Node  recordsNode = root.item(i);
				NodeList records = recordsNode.getChildNodes();
				for(int j=0;j<records.getLength();j++){
					Node recordNode = records.item(j);
					NodeList record = recordNode.getChildNodes();
					for(int k=0;k<record.getLength();k++){
						System.out.print(record.item(k).getTextContent());
					}
				}
			}
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}	
	}
		
	
	/**
	 * 将指定的XML文件解析后显示到页面上
	 * 思路:将解析的文件封装成一个对象,并添加到list中,再在页面上遍历出来
	 * */
	public List<WorkRecord> getRecordList(String fileName){
		List<WorkRecord> workList = new ArrayList<WorkRecord>();
		try {
			this.document=builder.parse(fileName);//指定要解析的文件
			NodeList root = this.document.getChildNodes();//获取根目录
			for(int i=0;i<root.getLength();i++){
				Node recordsList = root.item(i);
				NodeList records = recordsList.getChildNodes();
				for(int j=0;j<records.getLength();j++){
					Node recordList = records.item(j);
					NodeList record = recordList.getChildNodes();
					for(int k=0;k<record.getLength()-1;k++){
						if(k==(record.getLength()-1)/2){ //当k=25的时候,会报“空指针”异常
							break;
						}else{
							Node el = record.item(k);
							WorkRecord work = elementToObj(el,k);
							workList.add(work);
						}
					}
				}
			}
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return workList;
	}
	

	public WorkRecord elementToObj(Node el,int k){
		WorkRecord record = new WorkRecord();
		record.setCom_id(this.document.getElementsByTagName("com_id").item(k).getTextContent());//公司编号
		record.setID(this.document.getElementsByTagName("ID").item(k).getTextContent());//编号
		record.setContent(this.document.getElementsByTagName("content").item(k).getTextContent());//内容
		record.setClock(this.document.getElementsByTagName("clock").item(k).getTextContent());//时间
		record.setYH_ID(this.document.getElementsByTagName("YH_ID").item(k).getTextContent());//YH_ID
		return record;
	}
	
	public String dateToString(Date date){
		SimpleDateFormat stf = new SimpleDateFormat("yyyy-MM-dd");
		return stf.format(date);
	}
	
	public Date stringToDate(String strDate){
//		System.out.println("strDate="+strDate);
		SimpleDateFormat stf = new SimpleDateFormat("yyyy-MM-dd");
		Date date=null;
		try {
			 date = stf.parse(strDate);
//			 System.out.println("date="+date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date ;
	}
}
5.测试
package com.test;

import java.util.List;

import com.dao.impl.DOMImpl;
import com.util.WorkRecord;

public class DOMXmlTest {
	public static void main(String[] args){
		DOMImpl dom = new DOMImpl();
		String fileName = "D:\\XML\\DOMXml.xml";
		dom.init();
		dom.creatXML(fileName); //创建XML文件
		
//		dom.parseXML(fileName);//解析XML
		//遍历
	/*	List<WorkRecord> workList =dom.getRecordList(fileName);
		for(int i=0;i<workList.size();i++){
			System.out.println(workList.get(i).getCom_id()+" "+workList.get(i).getID()+" "+workList.get(i).getContent()+" "+workList.get(i).getClock()+" "+workList.get(i).getYH_ID());
		}
		*/
	}
}





  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值