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()); } */ } }
相关文章推荐
- Java中读取XML文件,生成XML格式的字符串并解析这个字符串
- 学习笔记-Java中的xml文件读取之DOM解析
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
- Java对xml文件的读取并解析的基本认识
- Java解析XML(一) 使用DOM读取XML文件
- Java生成和解析XML格式文件和字符串的实例代码【dom4j中的SAXReader对象读取并解析xml文件】
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
- 学习笔记-Java中的xml文件读取之DOM4J解析
- 运用java读取xml文件---DOM 解析
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
- 学习笔记-Java中的xml文件读取之JDOM解析
- JAVA以及JSP中读取XML文件(解析及路径问题)
- java解析xml文件:创建、读取、遍历、增删查改、保存
- Java读取WEB-INF下XML文件并进行解析
- 学习笔记-Java中的xml文件读取之SAX解析
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库
- java解析、读取xml文件,org.w3c.dom.Document
- Java解析、读取XML文件并存入TXT文件的简单例子
- Java读取WEB-INF下XML文件并进行解析
- 【java项目实战】dom4j解析xml文件,连接Oracle数据库