java解析xml模拟容器的实现 如spring等

本文介绍了一种使用Java和SAX解析器从XML配置文件中读取数据库连接信息的方法,并展示了如何利用这些信息建立到MySQL数据库的有效连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里通过java读取xml文件来实现数据库连接,需要加入数据库连接包

1.mysql.xml

<?xml version="1.0" encoding="UTF-8"?>
<data>
<datasource>
<servername>localhost</servername>
<serverport>3306</serverport>
<databasename>test</databasename>
<username>root</username>
<password>123456</password>
</datasource>
</data>
2.xml配置文件解析主要目的,是为了做前期工作

package com;

import java.util.Properties;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


public class ConfigParser extends DefaultHandler{
	//	定义一个properties用来存储属性
	private Properties props;
	private String currentName;
	private StringBuffer currentValue=new StringBuffer();
	public ConfigParser(){
		this.props=new Properties();
	}
	public Properties getProps(){
		return this.props;
	}
	//这里是将xml中的元素值加入currentValue
	public void characters(char[] ch,int start,int length)throws SAXException{
	currentValue.append(ch,start,length);
	}
	//在遇到</xx>时,将之间的字符存放在props中间
	public void endElement(String uri,String localName,String name)throws SAXException{
		props.put(currentName.toLowerCase(), currentValue.toString().trim());
	}
	//定义开始解析元素的方法,这里将<xx>中的名称xx提出来
	public void startElement(String uri,String localName,String qName,Attributes attributes )throws SAXException{
		currentValue.delete(0,currentValue.length());
		currentName=qName;
	}
}
3.xml配置文件计取处理

package com;

import java.util.Properties;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class ParseXML {
//定义一个Properties用来存储属性值
	private Properties props;
	public Properties getProps(){
		return this.props;
	}
	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;
		}
	}
}
4读取xml配置文件
package com;

import java.util.Properties;

public class ReadConfigXml {
private Properties props;
public ReadConfigXml(String url){
	ParseXML myRead=new ParseXML();
	try{
		myRead.parse(url);
		props=new Properties();
		props=myRead.getProps();
	}catch (Exception e) {
		// TODO: handle exception
		e.printStackTrace();
	}
}
public String getServerName(){
	return props.getProperty("servername");
}
public String getServerPort(){
	return props.getProperty("serverport");
}
public String getDatabaseName(){
	return props.getProperty("databasename");
}
public String getUserName(){
	return props.getProperty("username");
}
public String getPassword(){
	return props.getProperty("password");
}
}
//5.数据库连接测试

package com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnection {
private Connection con;
private DBConnection(){
	
}
public static DBConnection newInstance(){
	return new DBConnection();
}
public Connection getConnection(){
	ReadConfigXml r=new ReadConfigXml("src/mysql.xml");
	String url="jdbc:mysql://"+r.getServerName()+":"+r.getServerPort()+"/"+r.getDatabaseName();
	String username=r.getUserName();
	String password=r.getPassword();
	System.out.println(url+username+password);
	try {
		Class.forName("com.mysql.jdbc.Driver");
		con=DriverManager.getConnection(url,username,password);
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return con;
}
//测试连接
public static void main(String[] args) {
	Connection con=DBConnection.newInstance().getConnection();
	System.out.println("测试成功");
}
}







参考文档:http://lxj8495138.iteye.com/blog/221455

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值