您的位置:首页 > 数据库 > Oracle

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

2014-07-22 15:57 344 查看
<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());
}
*/
}
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: