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

news/2024/5/18 22:22:47 标签: 数据库, oracle, 数据库连接池, import, application, jdbc

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

作者:洪建

  在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获得数据库的连接,而具体连接的是哪一台机器上的数据库与应用无关。

 

http://www.niftyadmin.cn/n/612044.html

相关文章

Java与XML联合编程之DOM篇

Java与XML联合编程之DOM篇 rick1126 Java (2001-10-16 12:58:32) Java与XML联合编程之DOM篇(扬帆 2001年10月08日 17:16)DOM初步 DOM是Document Object Model的缩写,即文档对象模型。前面说过,XML将数据组织为一颗树&#xff…

pandas 柱状图_使用 Pandas 在 Python 中绘制数据 | Linux 中国

Pandas 是一个非常流行的 Python 数据操作库。学习怎样使用它的 API 绘制数据。来源:https://linux.cn/article-12333-1.html作者:Shaun Taylor-morgan译者:geekpi(本文字数:2238,阅读时长大约:…

acme云服务器生成证书_使用 acme.sh 自动从 letsencrypt 生成证书安装到Nginx

一、安装 acme.shcurl https://get.acme.sh | sh重新载入 .bashrcsource ~/.bashrc二、生成证书acme.sh 支持两种 HTTP 和 DNS 验证方式验证域名所有权,DNS 验证方式有自动与手动方式,自动方式验证是使用域名解析商提供的 API 自动添加 txt 记录完成验证…

python学生管理系统设置_python 学生管理系统

一、主界面def home(str1 游客):print(★★★★★★★★★★★★★★★★★★★★)print( 欢迎%s使用学生管理系统 % str1)print( )print( 1.regist )print( )print( 2.login )print( )print( 3.quest )print( )print(★★★★★★★★★★★★★★★★★★★★)returnif __n…

华为如何生成日志_如何优雅的在 Git 上 Commit 以及自动生成版本变更日志Changelog...

你有没有在开发工作中抱怨别人提交的乱七八糟?也不写每次提交是因为什么干了什么?如果在Github上为开源项目贡献代码的时候,提交没有按照人家的模板要求,你的合并请求还是不被接受的。而且杂乱无章的Commit不但会影响其他人&#…

黑苹果睡眠唤醒usb失灵_usbinjectall.kext下载||黑苹果usbinjectall(解决苹果系统usb接口失灵)10.12 最新版_ - 极光下载站...

usbinjectall文件是一款mac系统的驱动,可以用来解决苹果mac系统usb失灵,帮助在黑苹果机usb失灵的情况下,修复价值程序,修复usb属性。usbinjectall.kext介绍:n10.11 苹果OS改变了USB驱动程序的工作方式.在端口注入器的absense中,驱…

jemeter多场景混合案例_Jmeter 混合场景中实现一次登录进行多次其它接口的性能测试...

在实际的性能测试中,登录接口做完性能测试之后,关联的接口做性能测试的时候,需要单独做其它接口性能测试,不需要多次登录的时候,怎么设计性能测试场景呢?比如:并发执行时间 1 分钟,并…

Smartupload和commons-fileupload介绍与比较

WEB文件上传可能是网站建设中最常用的功能之一,我在项目开发中几乎都需要实现文件上传功能.前段时间自己搜集了一些上传组件.这篇文章中将介绍这些组件的使用方法,并且比较各自的优劣. 一,smartupload组件&…