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