以前我在写数据库连接的时候,都是在文件里写死的,或者一个简单地配置文件,只有一个数据库连接嘛,但是最近写一个测试工具的时候,需要很多数据库,而且有些还有分库规则,于是查找资料,完善了两个类,和xml的定义规则,分享出来。仅供参考,有任何指教请回复。不胜感谢

首先xml的配置格式定义如下

<?xml version="1.0" encoding="UTF-8"?>  
<config>  
	 <db-info>
        <id>oracle-test</id>  
        <driver-name>oracle.jdbc.driver.OracleDriver</driver-name>  
        <url>jdbc:oracle:thin:@127.0.0.1:1521:test</url>  
        <user-name>admin</user-name>  
        <password>admin</password>  
    </db-info>  
	 <db-info>
        <id>mysql-test</id>  
        <driver-name>com.mysql.jdbc.Driver</driver-name>  
        <url>jdbc:mysql://127.0.0.1:3306</url>  
        <user-name>root</user-name>  
        <password>root</password>  
    </db-info>
</config>

然后我们有XmlConfigReader类,用来读取这个配置文件,并且返回对应的jdbcConfig对象。

这个对象就是一个model类,对应xml的属性

然后我们的DBUtil类会调用XmlConfigReader,通用的一般是传个

 <id>mysql-test</id>

值,然后XmlConfigReader来读取返回,对象,然后在DBUtil里用这个对象得知来构造连接,我添加了一个简单的方法

public static Connection getConnection(String dbId,String dbName) throws ClassNotFoundException
	{
		Connection conn = null;

		try {
			//新建jdbc配置类。
			XmlConfigReader xcr=new XmlConfigReader();
			JdbcConfig jdbcconfig = xcr.getConnection(dbId,dbName);
			Class.forName(jdbcconfig.getDriverName());
			//取得连接对象。
			conn = DriverManager.getConnection(jdbcconfig.getUrl(), jdbcconfig.getUserName(), jdbcconfig.getPassword());

		} catch (ClassNotFoundException e) {
			// 抛出 exception
			e.printStackTrace();
		}catch(SQLException e)
		{
			e.printStackTrace();
		}

		return conn;

	}

就是多传一个数据库名

然后XmlConfigReader哩对应有这个方法

//分库分表使用
		public  JdbcConfig getConnection(String dbId,String dbName) {
			SAXReader reader = new SAXReader();

			// 拿到当前线程。
			InputStream in = Thread.currentThread().getContextClassLoader()
					.getResourceAsStream("sys-config.xml");
			try {
				Document doc = reader.read(in);
				Element rootElt = doc.getRootElement(); // 获取根节点
				Iterator<?> iter = rootElt.elementIterator("db-info");
				while (iter.hasNext()) {
					Element recordEle = (Element) iter.next();
					String title: = recordEle.elementTextTrim("id");
					if (title.equalsIgnoreCase(dbId)) {
						jdbcconfig.setDriverName(recordEle
								.elementTextTrim("driver-name"));
						jdbcconfig.setUrl(recordEle.elementTextTrim("url")+"/"+dbName);
						jdbcconfig.setUserName(recordEle
								.elementTextTrim("user-name"));
						jdbcconfig.setPassword(recordEle
								.elementTextTrim("password"));
					}
				}

			} catch (DocumentException e) {
				// 打印错误
				e.printStackTrace();
			}
			return jdbcconfig;

		}

 

jdbcconfig.setUrl(recordEle.elementTextTrim("url")+"/"+dbName);

这里会有一个拼接的操作,比较简单。

这几个类我打包了。由于我是用了maven做包管理,所以org.dom4j这个包自行下载了。。

下载地址:http://pan.baidu.com/s/1o617RAy