当前位置:K88软件开发文章中心编程语言JavaJava01 → 文章内容

用JDBC开发基于客户/服务器模式的Internet

减小字体 增大字体 作者:佚名  来源:翔宇亭IT乐园  发布时间:2019-1-3 0:09:41

数据库建立连接,该类将完成这些工作;

Statement类提供了一个执行SQL语句的容器。用来提交一个SQL查询;

ResultSet类用于控制结果类的存取。其作用是获得查询结果的一些信息,如结果的纪录数,字段数,字段名,结果集等与结果相关的信息。

(注意!由于本程序意在介绍编程方法和思想,所以JDBC的一些具体类的使用方法不属于本文的范畴。有关其中具体的使用方法将会在后面程序中写出。)

:2010-07-05 11:09:00

四、程序实现

本套示例程序采用客户/服务器的模式,因此存在客户端与服务器端两套程序。下面分别介绍两套程序的实现方法和程序片断,完整程序将在后面附上。

作为服务器端的程序,本示例才用JAVA的Application方式来编程,生成一个应用程序,可直接在JAVA的解释环境下运行。这个服务端程序的功能是监听服务器的某一个端口,当有客户程序进行连接时分配一个单独的线程为该客户服务,接受客户端的SQL查询,然后连接到服务器的数据库,把查询后的结果以数据流的方式返回给客户端。当客户端断开连接后,终止该线程,收回分配给该客户的资源。本程序的界面比较简单如图4-1所示,由两个Label框来显示一些信息。Label1用来显示服务器程序监听的端口号。Label2用来显示当有客户程序连接似的客户的连接数目,当客户端提交申请时,Label2还显示客户的查询的SQL语句及查询结果,该Label框是被每一个线程公用的,所以当有很多客户连接时,是很繁忙的。Button1按钮的作用是结束该服务器程序。

该客户程序由两部分组成:一个为应用程序的主类Server类,另一个为线程类ServerThread类。下面我们将分别介绍这两个类。

Server类:该类是由Frame类派生而来。

Server(String title):该函数为Server类的构造函数,主要用来进行程序的一些初始化工作。它调用AddComponent()函数来生成程序的界面。

AddComponent():该成员函数用来生成程序的界面,主要是在Frame中添加了四个Label框和一个Button按钮以及处理按钮的点击事件。

StartListen():该成员函数用来当程序启动时监听9001端口(注:该端口可由用户自己定义一个,但不要与系统冲突),然后启动一个无限循环来监听客户的连接,当有客户连接时生成一个线程为该客户服务。

Main():该成员函数是JAVA Application的程序入口。

 ServerThread类:该类是由Thread类派生而来,主要功能为接受用户要求,查询数据库,以及返回查询结果。由如下成员函数组成:

ServerThread(Label lab,int i,Socket s):该函数为ServerThread类的构造函数,主要功能为初始化该类。lab参数为一个Label类,用来显示一些系统信息;i参数为线程的序列号,由Server类的StartListen成员函数给出;s参数为传递的Socket类用来与连接的客户端进行连接。

InitJdbc(String str):该成员函数通过传递的SQL语句来建立一个JDBC连接,进行查询功能,并返回结果至JDBC的结果集中。str参数为一个SQL的查询语句。

DelJdbc(String str):该成员函数实现方法与InitJdbc函数相同,只不过是进行删除的操作。该函数在本例中并没有使用,有兴趣的读者可自己用一下。str参数为一个SQL的删除语句。

CloseJdbc():该成员函数为关闭一个JDBC的连接。

run():该成员函数是线程类的启动函数,是本例的核心函数。当线程启动后,首先用ServerThread构造函数传递的Socket类参数来生成in和out输入输出流,然后用一个无限的while循环来进行数据的接受,处理,编码和发送工作。具体实现在程序中。

(3) 客户端程序

由于本示例的客户端程序是运行与浏览器的,所以采用JAVA的APPLET方式编程。程序启动后自动连接至程序中定义的主机地址199.10.10.10(注 该地址可由用户自己确定但必须在网络属性中定义)本示例的测试功能是进行网上公交线路的查询,测试数据库为名为Stname.dbf的Foxpro5.0的数据库表,当程序启动后,用户可以在Text1框中输入一条SQL查询语句,键入一条SQL语句即可,示例语句为?/FONT>select busline,stindex,stname from stname where busline like ´2´ order by stindex 按Query按钮即可显示查询结果,可以用prev和next按钮进行上一页和下一页的翻页。该客户程序由两个类构成:一个为程序的主类Applet1;另一个为接受线程类Receiver类。下面将分别介绍:

 Apple1类:该类为主类,所以由Apple类派生而来。主要功能进行界面的生成及程序的初始化。

ReceiverThread类:该类是客户端程序的核心,由Thread类派生而来。该类的功能主要为查询的递交,结果的接受和解码。

Receiver(Label Lline,int alen,String hostname):该函数为该类的构造函数,主要用来进行一些初始化工作。Lline参数为Label类,用来显示一些系统信息;alen参数为得到数据的最大行数(注 本例中由于是测试故采用的是200行,用户可根据需要来更改);hostname参数为服务器的IP地址(此例为199.10.10.10,用户可根据需要更改)。

run():该成员函数为线程的运行函数,用来对服务器传递过来的数据进行接受和解码。

ExcuQuery(String q):该成员函数用来向服务器递交一条SQL查询语句。

boolean GetFindOver():该成员函数返回是否查询完毕。

boolean GetFind():该成员函数返回是否找到了数据。

int GetRecordNum():该成员函数返回查询结果的总共的记录号。

int GetFieldNum():该成员函数返回字段的数目。

String [ ][ ]GetData():该成员函数以二维数组的方式返回查询结果的数据。

以上为客户端和服务器端程序的介绍,读者可在后面的程序中结合实际进行理解。

五、调试方法

本程序是基于Internet/Intranet的客户服务器软件,因此最好要有一个基于TCP/IP的网络环境。服务器上要有Windows NT,IIS服务器程序或者WebSite等WWW服务器软件,并且把客户端程序放在可以通过HTTP方式访问的目录下;JAVA的运行环境,最好是安装JDK1.1.5以上的版本;ODBC驱动,本例使用的是FOXPRO 5.0的数据库Stname.dbf(这个数据库将随主文件一起),所以要安装FOXPRO 5.0的ODBC驱动,并且要在ODBC的?isual FoxPro Tables

设置->控制面板->32为ODBC->用户DSN->Visual Foxpro Tables->配置->Database type为Free Table directory->path为Stname.dbf所在的目录定位;在网络属性中标示自己的IP地址为199.10.10.10(注意!由于示例程序初始化时为199.10.10.10,所以要如此,用户也可根据自己的需要来修改客户端程序

JAVA程序的类路径的设置,可添加如下语句在批处理文件中:

SET PATH=C:\JAVA安装的路径\JAVA\BIN;后面可加以前的设置

SET CLASSPATH=C:\ JAVA安装的路径\lib\classes.zip\;C:\服务器程序的路径\;

完成以上设置后即可键入如下语句激活服务器端程序了:

 java Server回车

客户端要安装IE4.0的浏览器;正确设置

上一页  [1] [2] [3]  下一页


用JDBC开发基于客户/服务器模式的Internet