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 = Connection(sConnStr);
  }
  catch (Exception e)
  {
   System.out.println("ERROR:"+e.getMessage());
  }
  return conn;
 }
}
/**
* 在本地获得数据库连接
*/
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 = "";
 /**
 * 缺省构造器
sql优化的几种方式 */
 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 = Connection(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 = Connection(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");
   Connection("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 ONE Application Server 7中Oracle数据库连接池的配置,以及在应⽤中如何通过连接池获得数据库的连接。
  1、iPlanet Application Server 6.5连接池的配置
  先打开iPlanet Application Server 6.5的管理控制台,选中"database"⾯板,再选择"External JDBC Drivers"选项后,点击"Add…"按钮,在弹出的对话框中,添加⼀个名为"ora-type4"的JDBC Driver。
  Driver Classpath:该参数填写classes12.zip⽂件的物理路径。
  然后在"External JDBC DataSources"中选择"Add…",在弹出的对话框中添加⼀个JNDI名称为"credit2"的数据源。
  DriverType:选择刚添加好的"ora-type4";
  Datasource:ora199,为Oracle数据库服务名;
  Connection Pool Parameters:图中显⽰的是缺省设置,可以根据⾃⼰环境情况来更改这些设置。
  保存完设置后,在"DataSource Selection Box"中,选择刚添加的"credit2"数据源,再选择"Vendor Specific Properties"按钮。在对话中添加⼀个URL属性。
  ⾄此,iPlanet Application Server 6.5中的数据库连接池配置完毕,重起服务使之⽣效。
  2、Sun ONE Application Server 7连接池的配置
  在配置之前将classes12.zip⽂件置于…/server1/lib⽬录下。通过浏览器的4848端⼝打开Sun ONE Application Server 7的管理界⾯,选择"server1"->"JDBC"-> "Connection Pools"下的"New…"
  添加⼀个名称为"MyConnectionPool"的Oracle数据库连接池。"Next"下⼀步。
  在"General"中填写"Datasource Classname"。
  在"Properties"中将不需要的属性删除,同时添加"URL"属性。
  "dataSourceName"中填写Oracle数据库服务名。
  以下连接池的缺省设置,可以根据⾃⼰环境的情况作相应的调整。
  选择"Finish"完成连接池的设置。
  下⼀步为"MyConnectionPool"连接池创建⼀个JNDI,以便应⽤程序能够通过该名称获得连接池中的连接。 "server1"->"JDBC"-> "JDBC Resources"下的"New…"
  ⾄此,Sun ONE Application Server7中的数据库连接池配置完毕,重起服务使之⽣效。
  3、通过连接池获得连接
  以上在iPlanet Application Server 6.5和Sun ONE Application Server7中配置的连接池都可以通过以下的数据库连接类,从连接池中获得Oracle数据库连接。
/**
* 从连接池中获得数据库连接
*/
package com.j2ee.db;
import java.util.*;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
import javax.naming.*;
/**
* 通过连接池⽅式获得Oracle数据库连接
*/
public class DbConnection
{
 /**
  *
 */
 public DbConnection()
 {
 }
 /**
  * 获得Oracle数据库连接
 */
 public java.sql.Connection connectDbByConnectionPool()
 {
  java.sql.Connection conn=null;
  try
  {
   Context ctx = new InitialContext();
   DataSource ds = (DataSource)ctx.lookup("jdbc/credit2");
   Connection();
  }
  catch (Exception e)
  {
   System.out.println("ERROR:"+e.getMessage());
  }
  return conn;
 }
}
  4、使⽤连接池的优点
  使⽤连接池的优点主要体现在两个⽅⾯:
  对数据库的连接统⼀进⾏配置、管理、监控,以及对数据库连接池的参数进⾏优化调整,同时对应⽤中没有关闭或其他原因造成没有关闭的数据库连接由连接池统⼀进⾏管理。
  便于应⽤的移植和后端数据库的切换,因为在应⽤中通过统⼀的JNDI获得数据库的连接,⽽具体连接的是哪⼀台机器上的数据库与应⽤⽆关。