日期:2014-05-16  浏览次数:20421 次

Oracle数据库的连接(OCI方式、thin方式和JdbcOdbc桥方式)

这篇文章是在网上摘的、以前面试的时候问过我这样的问题“说说为什么通过thin方式连接数据库”,今天搜索的时候偶然间发现了、就摘下来了、以后好看看
在J2EE应用程序开发中,应用程序与数据库连接的建立是我们经常遇到的问题之一。在这里我主要谈谈在本地应用程序中通过OCI方式、thin方式和JdbcOdbc桥方式连接Oracle数据库,在iPlanet Application Server 6.5和Sun Java System Application Server 7中对Oracle数据库连接池的配置以及应用中如何从连接池中获得连接 

一、本地通过JDBC获得Oracle数据库连接 

通过JDBC获得Oracle数据库连接,有三种方式:OCI方式、thin方式和JdbcOdbc桥方式。OCI方式依赖于本地的动态链接库,如果在本地安装了Oracle数据库客户端可以采用该方式;而thin方式为纯java的数据库连接方式;JdbcOdbc桥方式依赖于本地ODBC数据库源的配置,这种方式一般不太被采用。 

1、OCI方式 

先在本地安装Oracle客户端,安装完之后,在安装的路径中可以找到…/jdbc/lib/classes12.zip文件,我们在环境变量classpath中设置classes12.zip所在的路径。 

然后通过以下的数据库连接类,在本地通过OCI方式获得Oracle数据库连接 

/** 
* 在本地获得数据库连接 
*/ 

package com.j2ee.db; 

import java.util.*; 
import java.sql.*; 
import javax.sql.*; 
import java.io.*; 
import oracle.jdbc.driver.*; 
import javax.naming.*; 

/** 
* 通过OCI方式获得Oracle数据库连接 
*/ 
public class DbConnection 
{ 
final static String sDBDriver = "oracle.jdbc.driver.OracleDriver"; 
final static String sConnStr = "jdbc:oracle:oci8:sr/sr@ora199"; 

/** 
* 
*/ 
public DbConnection() 
{ 
} 

/** 
* 获得Oracle数据库连接 
*/ 
public java.sql.Connection connectDbByOci() 
{ 
java.sql.Connection conn=null; 
try 
{ 
Class.forName(sDBDriver); 
conn = DriverManager.getConnection(sConnStr); 
} 
catch (Exception e) 
{ 
System.out.println("ERROR:"+e.getMessage()); 
} 
return conn; 
} 
} 
在连接字符串 "jdbc:oracle:oci8:sr/sr@ora199" 中,"sr/sr"为Oracle用户的用户名和口令,"ora199"为数据库服务名。 

2、thin方式 

先到Oracle技术网(http://otn.oracle.com/global/cn/software/tech/java/sqlj_jdbc/index.html)下载Oracle JDBC Drivers,同样地将下载后的zip文件的路径设置在环境变量classpath。 

然后通过以下的数据库连接类,在本地通过thin方式获得Oracle数据库连接。 

/** 
* 在本地获得数据库连接 
*/ 

package com.j2ee.db; 

import java.util.*; 
import java.sql.*; 
import javax.sql.*; 
import java.io.*; 
import oracle.jdbc.driver.*; 
import javax.naming.*; 

/** 
* 通过thin方式获得Oracle数据库连接 
*/ 
public class DbConnection 
{ 
private String sConnStr = ""; 

/** 
* 缺省构造器 
*/ 
public DbConnection() 
{ 
sConnStr = "jdbc:oracle:thin:@10.1.4.199:1521:ora199"; 
} 

/** 
* @param ip,serviceName 
*/ 
public DbConnection(String ip,String serviceName) 
{ 
sConnStr = "jdbc:oracle:thin:@"+ip+":1521:"+serviceName; 
} 

/** 
* 通过thin方式获得Oracle数据库的连接. 
*/ 
public java.sql.Connection connectDbByThin() 
{ 
java.sql.Connection conn=null; 
try 
{ 
Class.forName(sDBDriver); 
conn = DriverManager.getConnection(sConnStr,"sr","sr"); 
} 
catch (Exception e) 
{ 
System.out.println("ERROR:"+e.getMessage()); 
} 
return conn; 
} 

/**

* 通过thin方式获得Oracle数据库的连接. 
* @param userId,password 
*/ 
public java.sql.Connection connectByJdbc(String userId,String password) 
{ 
java.sql.Connection conn=null; 
try 
{ 
Class.forName(sDBDriver); 
conn = DriverManager.getConnection(sConnStr,userId,password); 
} 
catch (Exception e) 
{ 
System.out.println("ERROR:"+e.getMessage()); 
} 
return conn; 
} 
} 
这种方式运用起来比较灵活,简单,具有较强的移植性和适用性。只要注意连接字符串"jdbc:oracle:thin:@10.1.4.199:1521:ora199"中具体参数的设置即可 

3、JdbcOdbc桥方式 

先通过管理工具中的数据源来添加本地对Oracle数据库的连接,然后通过以下的数据库连接类,在本地通过JdbcOdbc桥方式获得Oracle数据库连接。 

/** 
* 在本地获得数据库连接 
*/ 

package com.j2ee.db; 

import java.util.*; 
import java.sql.*; 
import javax.sql.*; 
import java.io.*; 
import oracle.jdbc.driver.*; 
import javax.naming.*; 

/** 
* 通过JdbcOdbc桥方式获得Oracle数据库连接 
*/ 
public class DbConnection 
{ 
/** 
* 
*/ 
public DbConnection() 
{ 
} 

/** 
* 获得Oracle数据库连接 
*/ 
public java.sql.Connection connectDbByJdbcOdbcBridge() 
{ 
java.sql.Connection conn=null; 
try 
{ 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
con=DriverManager.getConnection("jdbc:odbc:ora199","sr","sr"); 
} 
catch (Exception e) 
{ 
System.out.println("ERROR:"+e.getMessage()); 
} 
return conn; 
} 
} 
在getConnection方法中第一个参数"jdbc:odbc:ora199" 中的"ora199"为本地ODBC数据源的数据源名称,第二个参数和第三个参数分别为Oracle的用户名和口令。 

二、通过连接池获得Oracle数据库连接 

这部分主要讲述在iPlanet Application Server 6.5和Sun Java System Application Server 7中Oracle数据库连接池的配置,以及在应用中如何通过连接池获得数据库的连接。 

1、iPlanet Application Server 6.