`
toreking
  • 浏览: 36115 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Java JDBC

    博客分类:
  • java
阅读更多

 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);

      还有许多其他捷径方法,待应用后总结......
           

 

  • 大小: 41.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics