<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());
}
*/
}
}