JBuilder9+Weblogic7实战篇
工具篇(配置JDBC 1)
作者:黄 凯
E_mail:hk_sz@163.com
Weblogic7中配置JDBC 1
一、JDBC简介
自从java语言于1995年5月正式公布以来,java风靡全球,出现了大量的用java语言编写的程序,其中也包括数据库应用程序。由于没有一个java语言的API,编程人员不得不在java程序中加入C语言的ODBC函数调用。这就使很多java的优秀特性无法充分发挥出来,比如平台无关性、面向对象特性等。随着越来越多的的编程人员对java语言的日益喜爱,越来越多的公司在java程序开发上投入的精力日益增加,对java语言接口访问数据库的API的要求越来越强烈。也由于ODBC的确有其不足之处,比如它并不容易使用,没有面向对象的特性等,Sun公司决定开发一个以java语言为接口的数据库应用程序开发接口。在JDK1.x版本中,JDBC只是一个可选部件,到了JDK1.1公布时,SQL类包(也就是JDBC API)就成为了java语言的标准部件。
JDBC(Java Database Connectivity java数据库连接)是java语言与数据库系统通信的标准API。它由一组用java语言编写的类和接口组成。JDBC为数据库开发人员提供了一个标准的API,使他们能够用纯java API编写数据库应用程序。有了JDBC,向各种关系数据库发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL语句。
简单地说,JDBC可做三件事:
★ 与数据库建立连接
★ 发送SQL语句
★ 处理结果
使用JDBC要引入组成JDBC的两个程序包:
★ java.sql (核心API)
★ javax.sql (扩展API)
有关JDBC最新的信息,可以查阅JDBC的网站,网址为:
http://java.sun.com/products/jdbc/
二、JDBC的结构
JDBC主要包括以下类:连接(Connection)、语句(Statement)和结果集(Resultset)。JDBC应用程序的工作方式是这样的:首先加载数据库的JDBC驱动程序(JDBC驱动程序有DriverManager类管理),然后建立连接(Connection),有连接建立语句对象(语句对象有三种:Statement、PreparedStatement和CallabelStatement)及结果集(Resultset)对象(结果集代表从数据库中取出的记录),通过语句对象和结果集对象进行各种数据库操作,最后关闭连接。
2.1 JDBC驱动程序
JDBC驱动程序有4种类型。选择何种类型的驱动程序主要取决于程序的应用范围。正确选择合适的驱动程序,使之符合数据库程序的设计,是提高程序性能必须考虑的一个方面。要想理解这几种驱动程序,首先要了解数据库驱动程序的基本原理。
数据库驱动程序是用来解决应用程序与数据库通信问题的。早期的数据库产品,提供一个通过网络与数据库通信的网络库(network libraries)。网络库由运行于客户端组件和数据库服务端组件组成。在Windows系统中,网络库通常以DLL(Dynamic-Link Library动态链接库)的形式存在。这种形式的数据库客户端程序开发有一个问题,每一种数据库有自己的一套API,因而开发出的程序不能独立于数据库。为了解决这个问题,数据库厂商决定提供一个建立在网络库之上的、统一的高层API,开发人员调用高层API,从而屏蔽了与数据库产品紧密相关的网络库。Microsoft推出的ODBC(Open Database Connectivity 开放数据库互连)API就是这样的一个产品。
JDBC是一个面向java开发人员的类似于ODBC的数据库访问接口。不同于ODBC的是,JDBC只支持java应用程序。在使用JDBC的java应用程序中,客户端程序中只调用JDBC的语句,真正与数据库通信是由数据库厂商提供的JDBC驱动程序完成的。
JDBC驱动程序分为以下4种类型:
★ JDBC-ODBC桥加ODBC驱动程序
它是把JDBC操作翻译成对应的ODBC调用。它的优点是可以访问ODBC能访问的所有数据库,缺点是执行效率比较低。
采用这种方式必须将ODBC二进制代码(在许多情况下,还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。
★ 本地API
它直接将应用程序与网络库连接,这样,必须在使用此驱动程序的计算机上安装网络库。
★ JDBC网络纯java驱动程序
将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议。这种数据库驱动程序安装在中间件服务器上,而不是在客户机上。网络服务器中间件(例如Weblogic Server)能够将它的纯java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。
★ 本地协议纯java驱动程序
把JDBC调用直接转换为DBMS所使用的网络协议。这将允许从客户机机器上直接调用DBMS服务器,是Internet访问的一个很实用的解决方法。它是完全用java实现的,不需要其他驱动程序和客户端网络库。此类驱动程序是数据库厂商提供的,能够提供对于本公司数据库系统最优化的访问。
Sun公司在Internet上提供了一个JDBC驱动程序目录,网址是:
http://servlet.java.sun.com/products/jdbc/drivers
2.2 加载JDBC驱动程序
使用JDBC的第一步是安装驱动程序。大多数数据库都有JDBC驱动程序,如果没有JDBC驱动程序,可以使用Sun的JDBC-ODBC桥驱动程序。
使用JDBC-ODBC桥驱动程序的语句如下:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
使用Oracle的JDBC驱动程序的语句如下:
Class.forName("oracle.jdbc.driver.OracleDriver");
2.3 连接(Connection)
2.3.1 直接连接与池连接
连接是客户机端java代码与数据库之间的通信连接,由JDBC驱动程序建立。它保存了所有对数据库服务器调用的上下文信息。在JDBC API中,连接对应于java.sql.Connection接口。创建一个连接后可以通过连接创建语句(Statement)对象、设置连接选项或管理事务(Transaction)。
连接分为两种:直接连接和池连接。
1.直接连接
直接连接是直接在客户端java代码中打开并维护的,对应于1、2、4驱动程序。使用直接连接时必须在完成对数据库的操作后将连接关闭。否则,太多的连接将导致系统性能下降甚至超过数据库服务器的连接限制,以至于其他程序无法建立到数据库服务器的连接。
2.池连接
池连接是被J2EE服务器打开和维护的。J2EE服务器启动时会建立一定数量的池连接(具体数量由配置参数决定),并一直维护不少于此数目的池连接。客户端需要连接时,池连接程序会返回一个未使用的池连接并将其标记为忙。如果当前没有空闲的连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用池连接的调用完成后,池驱动程序将此连接标记为空闲,这样,其他调用又可以使用这个连接。
2.3.2 如何建立Oracle的JDBC连接
Oracle提供了2种JDBC驱动程序:
◆ JDBC OCI驱动程序
◆ JDBC Thin驱动程序
使用JDBC OCI驱动程序建立连接的语句如下:
Connection con = DriverManager.getConnection("jdbc:oracle:oci8:@kkdb","TEST","TEST");
使用JDBC Thin驱动程序建立连接的语句如下:
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:kkdb","TEST","TEST");
2.4 语句(Statement)
语句用于对数据库发送数据操纵的命令,通过语句对象,可以完成获取结果集,对数据库记录进行增、删、改等操作,语句分为以下三种类型:
● 简单语句(Statement)与java.sql.Statement接口对应,用来执行简单SQL命令;
● 预编译语句(PreparedStatement)与java.sql.PreparedStatement接口对应,该类语句对象可以使用被预编译的SQL语句以提高执行效率;
● 可调用语句(CallableStatement)与java.sql.CallableStatement接口对应,主要用来调用数据库中定义的存储过程。存储过程是一段代码,用来执行重复、定义明确的任务,这段代码被编译后存储于数据库中。
2.5 结果集(Result)
结果集对应于java.sql.ResultSet接口。语句对象发出查询命令,所有符合条件的记录被取出后存在结果记录集对象。结果集包含符合SQL语句中查询条件的所有行,并且它通过一套get/set方法提供对这些行中数据的访问。结果集类似于一个表,其中有查询所返回的列标题及相应的值。
三、Weblogic7中配置JDBC
Weblogic Server有关JDBC的配置主要是指配置连接池(Connection Pool)和数据源(DataSource)。
前面已经介绍了,JDBC的连接有两种,一种是直接连接,另一种是池连接。Weblogic Server中的连接池(Connection Pool)就是用来存放池连接的。数据源(DataSource)相当于客户端程序和连接池的中介,想要获得连接池中的连接对象,必须建立一个与该连接池相应的数据源,然后通过该数据源获得连接。
使用连接池的好处:
☆节省时间 建立数据库连接是很费时的。通过连接池,可以事先在连接池中建好一定数量的连接,有新的请求来到时可以直接拿一个建立好的连接使用,不用新建连接。
☆封装用户信息 使用连接池可以封装连接数据库系统所用的用户信息(帐号和密码),这样客户端程序在建立连接时不用考虑安全信息。
3.1 连接Oracle数据库
3.1.1 配置startWLS.cmd后启动Weblogic Server
要将Oracle在Weblogic中使用,首先要在Weblogic Server(我的Weblogic安装在C盘)的启动文件C:\bea\weblogic700\server\bin\StartWLS.cmd文件中添加Oracle9i(我的Oracle使用默认安装在D盘)的驱动程序D:\oracle\ora92\jdbc\lib\classes12.zip,所以在CLASSPATH语句中添加:
set CLASSPATH=%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\weblogic_sp.jar;%WL_HOME%\server\lib\weblogic.jar;D:\oracle\ora92\jdbc\lib\classes12.zip;%CLASSPATH%
单击开始/程序/BEA WebLogic Platform 7.0/User Projects/mydomain/Start Server;
3.1.2 启动IE,在地址栏输入http://localhost:7001/console,回车,出现Weblogic Server登录页面,输入Username:和Password:,这里我的都是training,请大家记住,因为在以后还会用到这个用户名和密码。单击Sign In进入;
3.1.3 单击Connection Pools;
3.1.4 在右边窗体中单击Configure a new JDBC Connection Pool建立一个连接池,在该连接池的General选项卡中设置:
Name: oraclePool (连接池名字[自定义])
URL: jdbc:oracle:thin:@localhost:1521:kkdb (数据库连接URL字符串,Oracle的典型配置:jdbc:oracle:thin:@host name:port:SID,其中host name代表主机名、port代表所用端口号、SID为Oracle数据库的全局数据库名)
Driver Classname: oracle.jdbc.driver.OracleDriver
Properties: user=TEST
password=TEST
dll=ocijdbc9
protocol=thin
单击Create创建;
在Connections选项卡中做以下设置:
Initial Capacity: 5 (连接池中的初始连接数,默认值是1)
Maximum Capacity: 10 (连接池中最大连接数,默认值是1)
Capacity Increment: 1 (决定每次连接增加的连接数[当有新的连接请求而连接池中无空闲的连接时])
单击Apply应用;
设置Targets选项卡
设置Targets-Server,即设定此连接池的目标服务器。从左侧Available列表中选择一个服务器,将其选到右侧的Chosen列表中。单击Apply应用。
3.1.5 配置数据源testTxDataSource
单击控制台左侧域树的JDBC/Tx Data Source节点,然后单击右侧的Configure a new JDBC Tx Data Source...;
配置Configuration选项卡
Name: testTxDataSource
JNDI Name: jdbc/testTxDataSource
Pool Name: oraclePool
单击Create创建
设置Targets选项卡
设置Targets-Server,即设定此连接池的目标服务器。从左侧Available列表中选择一个服务器,将其选到右侧的Chosen列表中。单击Apply应用。
至此,完成Oracle在Weblogic Server的JDBC的配置。你可以重启Weblogic Server,如果不报错就OK。
注:本文所有参数都以《JBuilder9+Weblogic7实战篇之工具篇(ORACLE9i)》一文中配置的参数为主,SID为kkdb,登录用户为TEST,密码为TEST。如果你不是,请参照《JBuilder9+Weblogic7实战篇之工具篇(ORACLE9i)》建立属于你自己的SID和用户。
我的文章首发牛耳论坛(www.newer.com.cn/bbs)和程序员论坛(www.csdn.net),欢迎转载,不过,请保留作者以及修订者的名字,谢谢。