Dom4j解析XML学习之利用解析的数据进行JDBC操作

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
	
	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值