J2EE应用中与Oracle数据库的连接

作者:yi5    转贴自:yi5_yuyu  

J2EE 应用程序开发中,应用程序与数据库连接的建立是我们经常遇到的问题之一。在这里我主要谈谈在本地应用程序中通过 OCI 方式、 thin 方式和 JdbcOdbc 桥方式连接 Oracle 数据库,在 iPlanet Application Server 6.5 Sun ONE 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 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");
                       conn=ds.getConnection();
         }
         catch (Exception e) 
          {
              System.out.println("ERROR:"+e.getMessage()); 
          } 
          return conn;
 }
}
4 、使用连接池的优点
使用连接池的优点主要体现在两个方面:
1.       对数据库的连接统一进行配置、管理、监控,以及对数据库连接池的参数进行优化调整,同时对应用中没有关闭或其他原因造成没有关闭的数据库连接由连接池统一进行管理。
2.       便于应用的移植和后端数据库的切换,因为在应用中通过统一的 JNDI 获得数据库的连接,而具体连接的是哪一台机器上的数据库与应用无关。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值