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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章