构建数据库连接的配置方法
以前我在写数据库连接的时候,都是在文件里写死的,或者一个简单地配置文件,只有一个数据库连接嘛,但是最近写一个测试工具的时候,需要很多数据库,而且有些还有分库规则,于是查找资料,完善了两个类,和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; } ...