ITPub博客

首页 > 数据库 > Oracle > 使用xml文档封装数据库连接实体类

使用xml文档封装数据库连接实体类

Oracle 作者:10jnssman 时间:2013-09-27 16:00:00 0 删除 编辑

  程序中的可以使用实体类的方式来封装数据库连接字符串,以下是使用xml文档记录数据库连接字符串,使用SAX方式解析xml文档并封装到实体类,供BaseDao调用。

  第一:数据库连接字符串的实体类

  package com.entity;

  /**

  * 字符串连接实体类

  * @author Administrator

  *

  */

  public class DBConnectionString {

  private String driver;

  private String url;

  private String username;

  private String password;

  public String getDriver() {

  return driver;

  }

  public void setDriver(String driver) {

  this.driver = driver;

  }

  public String getUrl() {

  return url;

  }

  public void setUrl(String url) {

  this.url = url;

  }

  public String getUsername() {

  return username;

  }

  public void setUsername(String username) {

  this.username = username;

  }

  public String getPassword() {

  return password;

  }

  public void setPassword(String password) {

  this.password = password;

  }

  public DBConnectionString(String driver, String url, String username,

  String password) {

  this.driver = driver;

  this.url = url;

  this.username = username;

  this.password = password;

  }

  public DBConnectionString() {

  }

  }

  第二:xml文档

  oracle.jdbc.driver.OracleDriver

  jdbc:oracle:thin:@127.0.0.1:1521:ORCL

  at1202

  at1202

  com.microsoft.sqlserver.jdbc.SQLServerDriver

  jdbc:sqlserver://127.0.0.1:1433;databaseName=tempdb

  sa

  sasa

  第三:xml文档解析类

  package com.sax;

  import java.io.File;

  import java.io.IOException;

  import java.util.*;

  import javax.xml.parsers.ParserConfigurationException;

  import javax.xml.parsers.SAXParser;

  import javax.xml.parsers.SAXParserFactory;

  import org.xml.sax.Attributes;

  import org.xml.sax.SAXException;

  import org.xml.sax.helpers.DefaultHandler;

  import com.entity.DBConnectionString;

  /**

  * Sax解析XML文档:

  * 一:创建SAX解析器工厂,

  * 二:通过工厂创建解析器

  三:通过解析器解析文档,

  四:每解析一行时,会触发

  相应的事件管理器

  * @author Administrator

  *

  */

  public class SAXXML {

  /**

  * 解析xml文档并封装到实体类

  * @return

  */

  public List parseSAX(){

  SAXParserFactory f=SAXParserFactory.newInstance();

  try {

  SAXParser s=f.newSAXParser();

  YS ys=new YS();

  s.parse(new File("db.xml"),ys);

  List list=ys.getList();

  System.out.println(list.size());

  for (int i = 0; i < list.size(); i++) {

  System.out.println(list.get(i).getDriver());

  System.out.println(list.get(i).getUrl());

  System.out.println(list.get(i).getUsername());

  System.out.println(list.get(i).getPassword());

  System.out.println("-------------------------");

  }

  return ys.getList();

  } catch (ParserConfigurationException e) {

  e.printStackTrace();

  } catch (SAXException e) {

  e.printStackTrace();

  } catch (IOException e) {

  e.printStackTrace();

  }

  return null;

  }

  }

  /**

  * 自定义类继承自默认控制器类

  * 重写解析方法

  * @author Administrator

  *

  */

  class YS extends DefaultHandler{

  private List list=new ArrayList();

  private DBConnectionString str;

  private String temp;

  /**

  * 返回封装了实体类的集合

  * @return

  */

  public List getList() {

  return list;

  }

  @Override

  public void startElement(String uri, String localName, String qName,

  Attributes attributes) throws SAXException {

  temp=qName;

  if("db".equals(temp)){ //当解析到db时开始实例化对象

  str=new DBConnectionString();

  }

  }

  @Override

  //封装实体类属性

  public void characters(char[] ch, int start, int length)

  throws SAXException {

  if("driver".equals(temp)){

  String driver=new String(ch,start,length);

  str.setDriver(driver);

  }

  if("url".equals(temp)){

  String url=new String(ch,start,length);

  str.setUrl(url);

  }

  if("username".equals(temp)){

  String username=new String(ch,start,length);

  str.setUsername(username);

  }

  if("password".equals(temp)){

  String password=new String(ch,start,length);

  str.setPassword(password);

  }

  }

  @Override

  public void endElement(String uri, String localName, String qName)

  throws SAXException {

  if("db".equals(qName)){

  list.add(str); //封装完毕后添加到集合

  }

  temp=null; //由于xml中有回车所以必须每次将临时变量置为空

  }

  }

  第四:BaseDao

  package com.dao;

  import java.sql.*;

  import com.entity.DBConnectionString;

  import com.sax.SAXXML;

  import java.util.*;

  public class BaseDao {

  private SAXXML xml=new SAXXML();

  private Connection con=null;

  public static void main(String[] args) {

  new BaseDao().userSelect();

  }

  public void userSelect(){

  System.out.println("请选择要连接的数据库类型:1:oracle 2:sql2008");

  int count=new Scanner(System.in).nextInt();

  List list=xml.parseSAX();//从xml解析中获取连接字符串实体类对象

  switch (count) {

  case 1:

  this.getCon(list.get(0));//连接oracle数据库

  break;

  case 2:

  this.getCon(list.get(1));//连接sql2008数据库

  break;

  default:

  break;

  }

  }

  /**

  * 获取数据库连接

  * @param db

  * @return

  */

  public Connection getCon(DBConnectionString db){

  try {

  Class.forName(db.getDriver()); //加载驱动

  con=DriverManager.getConnection(db.getUrl(),db.getUsername(),db.getPassword());

  System.out.println("OK");

  } catch (ClassNotFoundException e) {

  e.printStackTrace();

  } catch (SQLException e) {

  e.printStackTrace();

  }

  return con;

  }

  }

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21104833/viewspace-1109195/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-03-13