JDBC在网络编程中的应用
2008-12-30
作者:玛依拉.别克强塔伊夫,古丽米拉
1.JDBC简介
随着计算机网络技术的发展且在它的推动下, Java语言现已成为一个流行的网络编程" title="网络编程">网络编程语言,这不仅是由于Java独有的面向对象、安全性、多线程、平台无关性等众多的特点的,而且是因为Java有了JDBC,JDBC是Java技术最重要且最实用的部分之一,它为计算机网络编程提供了强大的数据支持。JDBC即Java Database Connectivity,它实现了Java与数据库的互连,它提供了一组标准的API(Application Programming Interface,应用程序设计" title="程序设计">程序设计接口)调用来进行对数据库的访问,也就是说JDBC API是Java程序设计语言中访问数据的接口。有了JDBC就使Java的应用范围扩展到了数据库领域。在JDK以前的版本中,JDBC只是一个可选部件,到了JDK1.1公布时及其以后的版本中,SQL类包(也就是JDBC API)已成为Java语言的标准部件。JDBC由一组用Java编程语言" title="编程语言">编程语言写的类和接口组成,它为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以很方便地将SQL语句传送给几乎任何一种数据库。也就是说,开发人员可以不需要为了访问Oracle、Sybase或Microsoft的SQLServer而写3个不同的程序,而是只要写一个程序就可访问Oracle、Sybase或Microsoft的SQLServer。它力求达到的是Java应用如何同各种各样的数据库连接,而JDBC正是实现这种连接的关键。
2. 开发数据库应用系统的模型
JDBC支持两层应用模型及三层应用模型。在两层应用模型中客户端浏览器中运行的程序(例如:Java applet)可以直接与数据库服务器相连,直接访问此数据库,如图1所示。在两层模型中,因为是程序直接同数据库连接。这就需要能直接被访问的数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,而这些语句执行的结果将被传回给用户。在三层应用模型中客户端浏览器中运行的程序不可以直接与数据库服务器相连,不能直接访后台数据库,而是在这两者之间增加了一个中间Web服务器,如图2所示。首先客户机与中间服务器通信,由中间服务器处理客户机的请求,其命令将被发送到中间Web服务器,而中间Web服务器将SQL语句发送到数据库。数据库处理SQL语句并将结果返回中间Web服务器,然后中间Web服务器将它们返回用户。也就是说在三层应用模型中由中间服务器使用JDBC访问数据库。
3. JDBC的任务及JavaSQL包
JDBC能完成下列三件任务: ⑴同一个数据库建立连接;⑵向数据库发送SQL语句;⑶处理数据库返回的结果,而完成这些任务,要使用到java.sql包中的一系列类(class)、接口(interface)、方法(method)。 实际上JDBC的是两组面向应用程序和数据库驱动程序开发人员的API,以及将前者向后者转化的内在封装逻辑。这两组API即:面向数据库驱动程序开发人员的接口:JDBC Driver API和面向应用程序开发人员的接口JDBC API,前者是提供给数据库管理系统" title="管理系统">管理系统的生产厂家的,一般的网页编程开发人员不需要知道也可,而JDBC API有两个包java.sql和javax.sql,这是Java核心框架的组成部分,网络编程人员通过一定的规则调用这些包中的API,就可以能够实现对数据库管理系统的访问,开发各种动态网站系统。这个包中最重要的接口是:
⑴java.sql.DriverManager: 用来加载" title="加载">加载不同的JDBC驱动程序,对于给定的每一个连接请求,它将会依次让每一个驱动程序尽可能连接到目标URL上,为创建新的数据库链接提供支持。
⑵java.sql.Connection:完成对某一制定数据库的连接功能。而连接是与给定数据库的会话,当连接成功时,SQL才被执行和返回结果。
⑶java.sql.Statement:用来在一个已经创建的连接中,执行SQL语句并包含语句所产生的结果,即作为执行SQL语句的容器。在执行的任何时候,一个语句只能打开一个结果集。
⑷java.sql.Result:代表特定SQL语句执行后的数据库结果集。
4. 通过JDBC访问Web数据库
要通过JDBC访问数据库,可以分以下几步完成
⑴加载驱动程序:为了和的特定数据库链接,JDBC首先必须加载相应的驱动程序,驱动程序可以使用最常用的JDBC-ODBC bridge驱动程序,其方法为使用Class.forName();方法,也可以使用JDBC到通用网络协议的驱动程序;还可以使用由数据库厂商提供的驱动程序,其加载方法都一样要使用Class.forName()方法, 且在此方法的括号中填入驱动器名即可,例如使用JDBC-ODBC bridge驱动程序,程序代码书写格式为Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);,也可以在Class.forName()方法括号中填入一系列用冒号隔开的驱动器名,例如:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver:oracle.jdbc.driver.OracleDriver”);,这时JDBC将按照表的顺序搜索驱动程序,并使用第一个能成功地与给定的URL相连的驱动程序。
⑵建立同数据库的连接:DriverManager类中的方法getConnection用于建立于某个数据库链接。在与较小型的数据库例如Foxpro、Access连接时,只要指出数据源信息而不需要任何其他的附加条件,例如:
java.lang.String strCon = 'jdbc:odbc:st';
java.sql.Connection jsCon = java.sql.DriverManager.getConnection(strCon); 但在大型数据库中建立连接时需要给出用户名和密码,其使用方法为:
Connection Con = java.sql.DriverManager.getConnection(String url,String user,String password);。
⑶申请进行数据库操作的对象:建立连接后,在实际的数据库操作之前,要获得操作数据库的语句对象。其方法为,利用Con对象生成一个java.sql.Statement对象,此对象可以负责完成将SQL语句传递给数据库管理系统执行等任务。
⑷进行数据库操作:数据库操作工作包括查询表、更新表等,可以分别使用SQL SELECT、SQL UPDATE和SQL INSERT语句来完成。数据库的查询和修改操作分别通过executeQuery()和executeUpdate()方法实现。格式为:
java.sql.ResultSet jsRes = jsSta.executeQuery(strSQL);
⑸对数据库操作的结果进行处理:查询操作返回的结果集要进行处理,例如:按照某种数据类型取出数据库中某一列的值其程序代码格式为:
int SID = jsRes.getInt(4);
String TName = jsRes.getString('WSTName');。
⑹关闭数据库操作对象:数据库操作结束后,要将数据库操作结果集以及申请的语句对象和建立的数据库链接关闭。其程序代码为:
java.sql.Connection jsCon=null; //数据库连接对象
java.sql.Statement jsSta=null; //SQL语句对象
java.sql.ResultSet jsRes=null; //结果集对象
… …
jsRes.close();//关闭结果集
jsSta.close();//关闭SQL语句对象
jsCon.close();//关闭数据库
5.实例
数据库连接是网络编程的重要部分, Java程序就通过JDBC驱动程序与数据库相连,执行查询、提取、插入数据等等操作。我完成的省级课题基于Java技术的通用考试系统,采用Java JDBC技术对于数据库进行连接,微软公司Access2000数据库系统为后台数据库,其数据库中包含5个表:学生信息表USER:用于存放考生的信息,包括学号、考号、班级、姓名、交卷标记及考试成绩等;考试科目分类表TMFL:用于存放课程信息,包括各课程的名称及课程代码等;试题信息表TMXX:用于存放各课程的试题,为了便于管理;答题表TATIB:用于存放所有考生的答题信息,包括学号、题号、答题信息等;答题目录表TATIML等:用于管理答题结果。此系统中连接数据库且获得数据的关键代码为:
… … … …
java.sql.Connection jsCon; //数据库连接对象
java.sql.Statement jsSta; //SQL语句对象
java.sql.ResultSet jsRes; //结果集对象
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句
int RCount=0;
int CIndex=0;
int Len=0;
double i=0;
int j=0;
… … … …
Class.forName('sun.jdbc.odbc.JdbcOdbcDriver');//装载JDBC驱动程序
strCon = 'jdbc:odbc:st';//设置数据库连接字符串
jsCon = java.sql.DriverManager.getConnection(strCon); //连接数据库
jsSta = jsCon.createStatement();//创建一个可以滚动的只读的SQL语句对象
… … … …
strSQL = 'select WSTName,DSTName,STDD,STID,keID from TMXX where STID='+j ; //准备SQL语句
//执行SQL语句并获取结果集
jsRes = jsSta.executeQuery(strSQL);
while( jsRes.next()){
int SID = jsRes.getInt(2);
String STDD = jsRes.getString('STDD');
String TName = jsRes.getString('WSTName');
String DSTN=jsRes.getString('DSTName');
… … … … }
jsRes.close();//关闭结果集
jsSta.close();//关闭SQL语句对象
jsCon.close();//关闭数据库
… … … …}
基于Java技术的通用考试系统,从数据库中获得数据且显示题目的界面如图3所示。
参考文献
[1] 王克宏.Java语言SQL接口[M].北京:清华大学出版社,1997.
[2] 雨阳隆春.深入JSP网络编程[M]. 北京:清华大学出版社,2001.
[3] 路新春,刘国玲.JSP应用中的信息共享与传递技术[J].计算机应用,2003,(3)
基金项目:新疆自治区少数民族科技骨干人才特殊培养科研专项资金项目(2001—5)