Java JDBC 连接Oracle和MySql数据库
本文是通过Java JDBC连接Oracle和MySql数据库,其中用到了使用properties配置文件,所以在ConnectionFactory中java.util.Properties解析db-conn-config.properties配置文件。
1.首先看看db-conn-param.properties的写法:
#######################Oracle########################### oracle.driver: oracle.jdbc.driver.OracleDriver oracle.url: jdbc:oracle:thin:@localhost:1521:xcz oracle.username: scott oracle.password: tiger #######################Oracle########################### ######################MYSQL############################# mysql.driver = com.mysql.jdbc.Driver mysql.url = jdbc:mysql://localhost:3306/mysql mysql.username = root mysql.password = xcz ######################MYSQL#############################
注意:
* "oracle.jdbc.driver.OracleDriver" 等字符串前后面不可以有空格,否则会出现找不到驱动或用户名、密码错误等异常。
* properties 中字符串写入形式如同键值对,所以可以同上使用“=”或“:”把key与value隔开。
* properties 中value字符串不能使用引号包裹。
2.创建ConnectionFactory:
package com.orcl.util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; import java.util.UUID; public class ConnectionFactory { /** * 驱动 */ private String driver; /** * 连接字符串 */ private String url; /** * 数据库登录用户名称 */ private String username; /** * 数据库登录密码 */ private String password; private String db; /** * 常量代表"ORACLE" */ public final static String ORACLE_DB = "oracle"; /** * 常量代表"MYSQL" */ public final static String MYSQL_DB = "mysql"; /** * 单例模式 获取一个数据库连接工厂 */ private static ConnectionFactory connFactory = null; public static synchronized ConnectionFactory getConnFactoryInstance(String db){ if(connFactory == null){ connFactory = new ConnectionFactory(db); } return connFactory; } private ConnectionFactory(String db){ try { initOrclParams(db); } catch (IOException e) { e.printStackTrace(); } } /** * 通过配置文件获取数据库连接参数 * @param db 数据库名称 * @throws IOException */ private void initOrclParams(String db) throws IOException{ Properties properties = new Properties(); InputStream in = new FileInputStream(new File("db-conn-config.properties")); properties.load(in); if(db.equals(ORACLE_DB)) { getParams(properties,db); } else if(db.equals(MYSQL_DB)) { getParams(properties,db); } } /** * 根据数据库名获取相应的参数 * @param p Properties * @param db */ private void getParams(Properties p,String db){ //注意:如果不用trim(),这样properties文件中的字符串后面不能有空格,否则会出错 driver = p.getProperty(db + ".driver").trim(); url = p.getProperty(db + ".url").trim(); username = p.getProperty(db + ".username").trim(); password = p.getProperty(db + ".password").trim(); } /** * 获取连接对象 * @param db 连接的数据库名 取值于ConnectionFactory中的常量:ORCL_DB/MYSQL_DB * @return */ public Connection getConn() { Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(url, username, password); // 设置不自动提交 conn.setAutoCommit(false); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; } /** * 关闭操作 * @param conn * @param pst * @param rs */ public static void close(Connection conn, PreparedStatement pst, ResultSet rs) { try { if (rs != null) { rs.close(); } if (pst != null) { pst.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } /** * 获取UUID * @return */ public String getUUID() { return UUID.randomUUID().toString(); } public void setPassword(String password) { this.password = password; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public String getDb() { return db; } public void setDb(String db) { this.db = db; } }
3.测试:
@Test public void test() { ConnectionFactory factory = ConnectionFactory.getConnFactoryInstance(ConnectionFactory.ORACLE_DB); Connection conn = factory.getConn(); try { PreparedStatement pst = conn.prepareStatement("select * from emp"); java.sql.ResultSet rs = pst.executeQuery(); while (rs.next()) { System.out.println(rs.getString(2)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
附录:
关于properties,生产xml,并从其中解析出来的应用
Properties prop = new Properties(); prop.setProperty("ONE", "1"); prop.setProperty("TWO", "2"); prop.setProperty("THREE", "3"); prop.setProperty("FOUR", "4"); File f = new File("temp.xml"); if(!f.exists()){ f.createNewFile(); } OutputStream stream = new FileOutputStream(f); prop.storeToXML(stream, null); stream.close();
解析:
Properties p = new Properties();
p.loadFromXML(new FileInputStream(f));
System.out.println(p.get("ONE"));
System.out.println(p.getProperty("TOW"));
p.list(System.out);
还有许多其他捷径方法,待应用后总结......