程序中的可以使用实体类的方式来封装数据库连接字符串,以下是使用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;
}
}