分享
 
 
 

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

王朝java/jsp·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

在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、使用连接池的优点

使用连接池的优点主要体现在两个方面:

对数据库的连接统一进行配置、治理、监控,以及对数据库连接池的参数进行优化调整,同时对应用中没有关闭或其他原因造成没有关闭的数据库连接由连接池统一进行治理。

便于应用的移植和后端数据库的切换,因为在应用中通过统一的JNDI获得数据库的连接,而具体连接的是哪一台机器上的数据库与应用无关。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有