XML文件:MySql.xml
<?xml version="1.0"encoding="UTF-8"?>
<DataSource>
<!--数据库信息-->
<database name="mysql" version="14">
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://127.0.0.1/thdb</url>
<user>root</user>
<password>root</password>
</database>
</DataSource>
利用从XML中解析出的数据访问MySql数据库:
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
//import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Dom4jHandlerMysql {
/*
* 返回读到XML文档
*/
public static Document readXML(String xmlFileName){
Document document = null;
try {
//获得SAX解析器
SAXReader saxReader = new SAXReader();
//获得 xml文档
document = saxReader.read(new File(xmlFileName));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return document;
}
/**************/
public static void main(String[] args){
Document temp = readXML("mysql.xml");
String driver = null;
String url = null;
String user = null;
String password = null;
//获得XML文档的根节点
Element root = temp.getRootElement();
// start if
if(root.getName().equals("DataSource")){ //判定读到的是DataSource根节点
//返回root节点下的database子节点
@SuppressWarnings("unchecked")
List<Element> childElements = root.elements("database"); //参数为子节点名
//遍历子节点
for(Element childElement : childElements ){
//打印database节点属性
// @SuppressWarnings("unchecked")
// List<Attribute> attributes = childElement.attributes();
// for(Attribute attribute : attributes){
// System.out.println(attribute.getName() + " " +attribute.getValue() );
// }
@SuppressWarnings("unchecked")
List<Element> childrens = childElement.elements();
for(Element child: childrens){
/*
* 依次获取所需driver、url、user、password信息
*/
if(child.getName().equals("driver")){
driver = child.getText();
}
else if(child.getName().equals("url")){
url = child.getText();
}
else if(child.getName().equals("user")){
user = child.getText();
}
else if(child.getName().equals("password")){
password = child.getText();
}
}
}
} //end if
/**************************************************/
// System.out.println("driver = " +driver );
// System.out.println("url = " + url);
// System.out.println("user = " + user);
// System.out.println("password = " + password);
/******************** 访问数据库 **********************/
/*
* 用从XML文件中读到的数据作为参数信息访问数据库【OK】
*/
try{
//加载驱动
//Class类:java.lang.Class
//方法:public static Class<?>forName(String className)throws ClassNotFoundException 返回与带有给定字符串名的类或接口相关联的 Class 对象。
Class.forName(driver);
//String url = "jdbc:mysql://127.0.0.1/thdb";
//通过DriverManager获取连接
//getConnection(String url, Properties info)
//getConnection(String url, String user, String password)
Connection con = DriverManager.getConnection(url,user,password);
// 打印连接信息
System.out.println("con" + con);
//准备数据库操作
//Statement(接口) :用于执行静态 SQL 语句并返回它所生成结果的对象
Statement stm = con.createStatement();
//定义sql语句(可以直接用String类定义一个字符串,效果和下面一样)
StringBuffer sqlB = new StringBuffer();
sqlB.append("SELECT * FROM Information" );
//执行sql语句的方法executeXXX有多个,大同小异(注意SQL语句在这只是一个字符串,也就是说不检查SQL语句的正确性)
//ResultSet executeQuery(String sql) throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象
//注意:executeQuery()返回值是一个ResultSet集合
ResultSet rsB = stm.executeQuery(sqlB.toString());
System.out.println("第1个查询的结果是: ");
while(rsB.next()){
System.out.println(rsB.getInt(1) + " " + rsB.getString(2) + " "
+ rsB.getString(3) + " "+rsB.getString(4)+" " + rsB.getInt(5) );
}
String sql = "SELECT * FROM Information WHERE Age = 26" ;
ResultSet rs = stm.executeQuery(sql);
System.out.println("第2个查询的结果是: ");
while(rs.next()){
System.out.println(rs.getString(2) + " " );
}
if(rs != null) rs.close(); //关闭 结果集
if(stm != null)stm.close(); //关闭 声明
if(con != null)con.close(); //关闭 连接对象
}
catch(SQLException ex){
ex.printStackTrace();
}
catch(ClassNotFoundException ex){
ex.printStackTrace();
}
} // end mian
}