DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 利用SAX解析讀取XML文件
利用SAX解析讀取XML文件
編輯:XML詳解     
這是我的第一個BLOG,今天在看《J2EE應用開發詳解》一書,書中講到XML編程,於是就按照書中的步驟自己測試了起來,可是怎麼測試都不成功,後來自己查看了一遍源碼,發現在讀取XML文件的位置時有誤,於是進行了更改,還真行了,心中湧出一中成就感,現將源碼貼出來與給位分享:

  使用XML文件連接MySQL數據庫,database.conf.XML文件如下:

<database-conf>
<datasource>
 <driver>com.MySQL.jdbc.Driver</driver>
 <url>jdbc:MySQL://127.0.0.1:3306/J2EE14</url>
 <user>bn</user>
 <passWord>bn</passWord>
</datasource>
</database-conf>

新建一個Handler,用來解析該XML配置(ConfigParser.Java) :

package com.J2EE14.ch4;
import  org.XML.sax.Attributes;
import org.XML.sax.helpers.DefaultHandler;
import org.XML.sax.SAXException;

import Java.util.PropertIEs;

/**
 *ConfigParser擴展了DefaultHandler,它用於獲得數據庫的連接屬性
 */
public class ConfigParser extends DefaultHandler
{
    //定義一個PropertIEs 用來存放屬性值
 private PropertIEs props;
 private String currentName;
 private StringBuffer currentValue =new StringBuffer();
 
    //構建器初始化props
 
 public ConfigParser()
{
  this.props=new PropertIEs();
 }
 public PropertIEs getProps()
 {
  return this.props;
 }
 
     //定義開始解析元素的方法. 這裡是將<xxx>中的名稱xxx提取出來
 
 public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException
 {
  currentValue.delete(0,currentValue.length());
  this.currentName=qName;
 }
 
    //這裡是將<xxx></xxx>之間的值加入到currentValue
 
 public void characters(char[] ch, int start, int length) throws SAXException {

 currentValue.append(ch, start, length);

 }

    /**
     *把XML配置文件的中相關的屬性保存到PropertIEs對象中
     */

 public void endElement(String uri,String localName,String qName)throws SAXException
 {
  props.put(qName.toLowerCase(),currentValue.toString().trim());
 }
}

用來解析XML的類,其他程序通過這個類來獲得數據庫的連接屬性(ParseDatabaseConfig
.Java):

package com.J2EE14.ch4;

import Java.util.PropertIEs;
import Javax.XML.parsers.SAXParser;

import Javax.XML.parsers.SAXParserFactory;

/**
 *其它程序通過ParseDatabaseConfig來獲得數據庫的配置信息,
 *這樣使得類之間的耦合松散
 */
public class ParseDatabaseConfig
{
    //定義一個PropertIEs 用來存放屬性值
 private PropertIEs props;
 
 public PropertIEs getProps()
 {
  return this.props;
 }
 /**
  *解析XML配置文件,把屬性保存起來
  */
 public void parse(String filename)throws Exception
 {
        //將我們的解析器對象化
  ConfigParser handler=new ConfigParser();
 
        //獲取SAX工廠對象
  SAXParserFactory factory=SAXParserFactory.newInstance();
  factory.setNamespaceAware(false);
  factory.setValidating(false);
 
        //獲取SAX解析
  SAXParser parser=factory.newSAXParser();
 
  try
  {
            //將解析器和解析對象XML聯系起來,開始解析
   parser.parse(filename,handler);
 //獲取解析成功後的屬性
   props=handler.getProps();
  }
  finally
  {
   factory=null;
   parser=null;
   handler=null;
  }
 }

}

最後是一個數據庫應用(MyDatabaseApplication
.Java):

package com.J2EE14.ch4;

import Java.util.PropertIEs;
import Java.sql.*;

/**
 *MyDatabaseApplication是一個示例應用,它通過ParseDatabaseConfig
 *來獲得數據庫的連接屬性以連接數據庫
 */
public class MyDatabaseApplication
{
 private Connection con;
 PropertIEs dbProps;
 /**
  *構造方法,獲得數據庫的連接屬性
  */
 public MyDatabaseApplication()throws Exception
 {
  ParseDatabaseConfig databaseConfig=new ParseDatabaseConfig();
  databaseConfig.parse("database.conf.XML");
  this.dbProps=databaseConfig.getProps();
 }
 public Connection getConnection()throws Java.sql.SQLException
 {
  try
  {
   Class.forName(dbProps.getProperty("driver"));
    }
  catch(Java.lang.ClassNotFoundException e)
  {
   System.err.println("Not Found Driver:"+dbProps.getProperty("driver"));
  }
  //使用配置的屬性創建一個連接。
  return Java.sql.DriverManager.getConnection(
         dbProps.getProperty("url"),
         dbProps.getProperty("user"),
         dbProps.getProperty("passWord"));
   }
  
   /**
    *測試方法
    */
   public void doBusiness()
   {
   
     try
     {

       con=getConnection();
       Statement stmt=con.createStatement();
       System.out.println("創建一個表...");
       stmt.execute("create table testconfig(id int not null,name varchar(20),constraint pk_testconfig primary key(id))");
 System.out.println("在表中添加數據...");
       stmt.execute("insert into testconfig values('001','hellking')");
       ResultSet rst=stmt.executeQuery("select * from testconfig");
       System.out.println("讀取表中的數據...");
       while(rst.next())
       {
        System.out.println("id:"+rst.getInt("id"));
        System.out.println("name:"+rst.getString("name"));
       }
       rst.close();
       stmt.execute("drop table testconfig");
       con.close();
    }
    catch(Java.sql.SQLException se)
    {
       System.err.println("連接數據庫或者操作發生錯誤");
       se.printStackTrace(System.err);
    }
       finally
    {
       try
       {
        con.close();
       }
       catch(Exception e){}
    }
   }
  
   public static void main(String[] args)
   {
    System.out.println("使用XML作為數據庫的配置。\n");

    try
    {
     MyDatabaseApplication app=new MyDatabaseApplication();
     app.doBusiness();
    }
    catch(Exception e)
    {
     System.err.println("發生異常");
    }
   }
   
   
}


XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved