drp——jdbc連接數據庫

一、JDBC概念、體系

JDBC(Java DataBase Connectivity)是一種執行SQL語句的java API,可以爲多種關係數據庫提供統一的訪問接口,能夠以一致的方式連接多種不同的數據庫系統。進而使用標準的SQL語言來存取數據庫中的數據。JDBC能完成下列3個功能:

    1.與數據建立連接

    2.向數據庫發送SQL指令

    3.處理數據庫返回的結果


JDBC API通過數據庫驅動程序管理器(DriverManager)加載具體的數據庫驅動程序。數據庫驅動程序負責與具體數據庫的透明連接。JDBC數據庫驅動程序管理器將確保正確的驅動程序被用於連接數據源。它可以同時支持與不同數據庫的連接。JDBC數據庫驅動程序管理器將標準JDBC指令轉換成適用於不同數據庫的通信網絡協議指令或其他API指令,這種指令的轉換機制,使基於JDBC接口開發的程序可以獨立於數據庫的種類。如果底層的數據庫被更換了,用戶只需要相應的替換程序中所引用的JDBC驅動程序即可。

簡單做了下圖:


                         


DRP中,在MyEclipse中連接Oracle數據庫爲例:

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 取得與數據庫的連接
 * @author xujiao
 *
 */
public class DbUtil {

	public static Connection getConnection(){
		Connection conn = null;
				
		try {
			//加載驅動程序
			Class.forName("oracle.jdbc.driver.OracleDriver");
			//訪問數據庫的連接串
			String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
			//連接數據庫用戶名
			String username="drp1";
			//連接數據庫密碼
			String password = "drp1";
			//取得與數據庫的連接
			conn = DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {	
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
}

以上示例中定義了四個與具體數據庫有關的變量,如果要使用其它數據庫只要修改這四個變量就可以了。


如果更換數據庫,爲了避免要修改程序代碼,將這個四個變量放到配置文件中:

1.建立如下配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<db-info>
		<driver-name>oracle.jdbc.driver.OracleDriver</driver-name>
		<url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</url>
		<user-name>drp1</user-name>
		<password>drp1</password>
	</db-info>
</config>
2.將與連接數據庫相關的四個變量,封裝到實體類中

/**
 * 建立連接數據庫的相關實體類
 * @author xujiao
 *
 */
public class JdbcConfig {
	
	private String driverName;
	private String url;
	private String userName;
	private String password;
	
	public String getDriverName() {
		return driverName;
	}
	public void setDriverName(String driverName) {
		this.driverName = driverName;
	}
	
	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 void setPassword(String password){
		this.password = password;
	}
}

3.讀取配置文件類:

package com.bjpowernode.drp.util;


import java.io.InputStream;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

/**
 *採用單例模式解析sys-config.xml
 * @author xujiao
 *
 */
public class XmlConfigReader {
	
	//懶漢式(延遲加載lazy)
	private static XmlConfigReader instance = null;
	
	private JdbcConfig jdbcConfig = new JdbcConfig();
	
	private XmlConfigReader(){
		SAXReader reader = new SAXReader();
		InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml");

		try{
			//取得jdbc相關配置信息
			Document doc = reader.read(in);
			Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name");
			Element urlElt = (Element)doc.selectObject("/config/db-info/url");
			Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name");
			Element passwordElt = (Element)doc.selectObject("/config/db-info/password");
			
			//設置jdbc相關配置
			jdbcConfig.setDriverName(driverNameElt.getStringValue());
			jdbcConfig.setUrl(urlElt.getStringValue());
			jdbcConfig.setUserName(userNameElt.getStringValue());
			jdbcConfig.setPassword(passwordElt.getStringValue());
			
		}catch(DocumentException e){
			e.printStackTrace();
		}
	}
	
	public static synchronized XmlConfigReader getInstance(){
		if(instance == null){
			instance = new XmlConfigReader();
		}
		return instance;
	}
	
	/**
	 * 返回jdbc相關配置
	 * @return
	 */
	public JdbcConfig getJdbcConfig(){
		return jdbcConfig;	
	}

}
4.取得數據庫連接的類

package com.bjpowernode.drp.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *取得數據庫的連接
 * @author xujiao
 *
 */
public class DbUtil {
	/**
	 * 取得Connection
	 * @return
	 */
	public static Connection getConnection(){
		
		Connection conn = null;
		try{
			//實例化讀取連接數據庫配置文件的類
			JdbcConfig jdbcConfig = XmlConfigReader.getInstance().getJdbcConfig();
			Class.forName(jdbcConfig.getDriverName());
			conn = DriverManager.getConnection(jdbcConfig.getUrl(),jdbcConfig.getUserName(),jdbcConfig.getPassword());
		}catch(ClassNotFoundException e){
			e.printStackTrace();
		}catch(SQLException e){
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void close(Connection conn){
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

這樣,通過讀取配置文件,就能取得對Oracle的連接,如果要連接其它的數據庫,只需要修改配置文件就可以了。


總結:

上述實例是通過實現特定的數據庫協議直接與數據庫通信,所以效率很高,但是當目標數據庫的類型更改時,需要更換JDBC驅動程序,並在本地安裝。大多數的數據庫系統都帶有ODBC驅動程序,在之前的項目中,我們也是通過ODBC驅動程序訪問數據庫。在JAVA中,存在這樣的一個橋,JDBC-ODBC橋使基於JDBC的程序通過傳統的ODBC驅動程序訪問數據庫。但是JDBC-ODBC橋需要引入ODBC訪問層,程序的執行效率會降低,在大、中型系統中並不適用。


發佈了106 篇原創文章 · 獲贊 78 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章