1、题目三 数据库通用查询系统1设计内容及要求1.1 数据库通用查询系统的基本要求当仅仅查询数据库表中的记录时,我们可以不必知道表中字段的属性,因为无论字段是何种属性,总可以使用 getString(int columnIndex)或getString(String columnName)方法返回字段值的字符串表示。另外,无论字段是何种属性,SQL 语句的 LIKE 子语句允许字段值以字符串形式与其他字符串进行匹配比较。基于以上所述,要求设计一个 B/S 模式的数据库通用查询系统,具体要求如下:(1)客户端 Java Applet 程序从加载该 Java Applet 程序的 html 文件中获取
2、数据库中的表的名字、表的字段名字以及表中字段的个数。这样一来,当需要更换所查询的表时,只需修改 html 文件,而不必修改 Java Applet 程序,使用 Java Applet 在查询数据时具有了通用性。(2)Java Applet 通用套接字连接和服务器的 Java 应用程序实现通信。Java Applet 程序将表的名字、表中字段的个数以及查询条件提交给服务器,服务器端的 Java 应用程序进行查询操作,并将查询结果返回给 Java Applet 程序。1.2 需实现的主要功能(1) B/S 架构;(2) 用数据库存储数据;(3) 客户端用小应用程序实现;(4) 有登陆界面;(5)
3、数据可实行添加和删除功能。2需求分析2.1 数据库设计JDBC 操作不同的数据库仅仅是连接方式上的不同,我们使用 Microsoft SQL Server 2005 数据库管理系统创建一个名字为 book2.mdf 的数据库。1、建立数据库选择 Windows 2000/XP 系统桌面上的“开始”“所有程序” Microsoft SQL Server 2005SQL Server Management Studio 命令,启动数据库管理系统,连接到服务器。然后选择新建数据库 book.mdf,定位文件夹到F:java 课程设计chaper12。2、创建表创建好数据库后,就可以在该数据库下建立若
4、干个表。在 book.mdb 数据库中导入数据源为 Microsoft Acess 名为 bookform.mdb 的表。3、设置数据源选择“控制面板”“管理工具” “ODBC 数据源”(某些 Windows 2000/XP 系统,需选择 “控制面板”“性能和维护 ”“管理工具”“ODBC 数据源”) 命令,双击 ODBC 数据源图标,创建 SQL Server 的新数据源,名称为 book,然后一直下一步,测试数据源成功即可。2.2 服务器端和客户端的数据传输方式服务器端和客户端的数据时用套接字来传输的。IP 地址表示 Internet 上的计算机,端口号标识正在计算机运行的进程。端口号与
5、IP 地址的组合得出一个网络套接字。客户端使用 Socket 类建立到服务器的套接字连接,具体实现:trySocket sock=new Socket(String host,int port);catch(IOException e)当套接字连接 sock 建立后,sock 使用 getInputStream()方法获得一个输入流,然后把获得的输入流接到另一个数据流上,然后就可以从这个数据流读取服务器来的信息,同样 sock 使用 getOutputStream()方法获得一个输出流,然后把获得的输出流接到另一个 DataOutputStram()数据流上,然后向这个数据流写入信息,发送给服
6、务器。客户负责建立客户端到服务器的套接字连接,即客户端负责呼叫,因此服务器必须建立一个等待接收客户的套接字的 ServerSocket对象,具体实现:tryServerSocket server_socket=new ServerSocket(int port);catch(IOException e)当服务器的 ServerSocket 对象建立后,就可以使用 accept()方法接收客户的套接字。2.3 服务器端功能设计DatabaseServer 类是数据库通用查询系统服务器端的主类,负责响应客户的连接请求、建立和客户的套接字连接,并负责在服务器端查询数据库。标明DatabaseServ
7、er 类的主要成员变量、方法的 UML 图如图 3-1 所示。D a t e b a s e S e r v e rD a t e b a s e S e r v e r ( ) : 无类型s t a r t S e r v e r ( i n t ) : v o i dM a i n ( S t r i n g ) : v o i ds e r v e r : S e r v e r S o c k e ty o u : S o c k e ty o u A d d r e s s : I n e t A d d r e s s图 3-1 DatabaseServer 类的 UML 图以下是
8、 UML 图中有关数据和方法的详细说明。1、成员变量(1)server 是 ServerSocket 对象,负责等待接受客户的套接字请求,当有客户请求套接字连接时,server 将接受用户的请求,并调用 accept()方法返回服务器端所建立的 Socket 对象 you,即建立服务器端套接字和客户端套接字的连接。(2)you 是 Socket 对象,该对象是驻留在服务器端的套接字对象,有 server 调用 accept()方法所返回。(3)yourAddress 是 InetAddress 对象,负责存放客户端的 IP。2、方法(1)DatabaseServer()是构造方法。(2)Dat
9、abaseServer 对象调用 startServer(int port)方法响应客户的请求。(3)main 方法是程序运行的入口方法。综上所述,DatabaseServer 类运行效果如图 3-2 所示。图 3-2 DatabaseServer 类运行效果图2.4 客户端功能设计Java Applet 属于客户端程序,尽管 DatabaseClient 类驻留在服务器端,但它需要下载到客户端的浏览器中来运行,即浏览器通过运行一个 HTML 文件来加载执行 DatabaseClient 是 java.applet 包中 Applet 的一个子类,并实现了 Runnable 接口。Databa
10、seClient 类的主要成员变量和方法的 UML 图如图3-3 所示。A p p l e t R u n n a b l eD a t a b a s e C l i e n tc h o i c e : C h o i c e完全一致 , 前方一致 , 后方一致 ,中间包含 : C h e c k b o x显示查询结果 : T e s t A r e as o c k e t : S o c k e ti n i t ( ) : v o i ds t a r t ( ) : v o i ds t o p : v o i dr u n ( ) : v o i d图 3-3 Database
11、Client 类的 UML 图3总体设计3.1 总体功能图主界面登陆界面 操作界面查询 添加 删除图 3-4 总体功能图3.2 总体流程图开始结束输入用户名和密码用户名和密码是否正确小应用程序查看器查询添加删除输入查询内容输入添加内容输入删除内容是否成功 是否成功 是否成功YNNNNY Y Y图 3-5 总体流程图4数据库设计4.1 数据库及表结构的建立JDBC 操作不同的数据库仅仅是连接方式上的不同,我们使用 Microsoft SQL Server 2005 数据库管理系统创建一个名字为 book.mdf 的数据库。1、建立数据库选择 Windows 2000/XP 系统桌面上的“开始”“
12、所有程序” Microsoft SQL Server 2005SQL Server Management Studio 命令,启动数据库管理系统,连接到服务器。然后选择新建数据库 book.mdf,定位文件夹到F:java 课程设计 chaper12。图 3-6 数据库连接到服务器效果图图 3-7 数据库系统操作界面图 3-8 新建数据库效果图2、创建表创建好数据库后,就可以在该数据库下建立若干个表。在 book.mdb 数据库中导入数据源为 Microsoft Acess 名为 bookform.mdb 的表。图 3-9 表的数据设计图 3-10 表的数据3、设置数据源选择“控制面板”“管理
13、工具” “ODBC 数据源”(某些 Windows 2000/XP 系统,需选择 “控制面板 ”“性能和维护”“管理工具”“ODBC 数据源”) 命令,双击 ODBC 数据源图标,创建 SQL Server 的新数据源,名称为 book,然后一直下一步,测试数据源成功即可。4.2 JDBC-ODBC 的建立建立一个 JDBC-ODBC 桥接器:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);这里,Class 是包java.lang 中的一个类,该类通过调用静态方法 forName 加载 sun.jdbc.odbc包中的 JdbcOdbcDriver
14、类来建立 JDBC-ODBC 桥接器。建立桥接器时可能会发生异常,因此,要捕获这个异常。建立桥接器的标准如下:try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);catch(ClassNotFoundException e)4.3 JAVA 数据库的连接首先使用 java.sql 包中的 Connection 类声明一个对象,然后再使用类DriverManager 调用它的静态方法 getConnection 创建这个连接对象:Connection con=DriverManager.getConnection(“jdbc:odbc:数据源名字
15、“,“login name“,“password“);假如没有为数据源设置 login name 和password,那么连接方式如下:Connection con=DriverManager.getConnection(“jdbc:odbc:数据源名字 “,“,“);为了能和数据源 myDataSouce 交换数据,建立 Connection 对象如下:Connection con=DriverManager.getConnection(“jdbc:odbc: myDataSouce “,“,“);建立连接时应捕获 SQLException 异常:try con=DriverManager.
16、getConnection(“jdbc:odbc:myDataSouce“,“,“);stmt=con.createStatement();catch(SQLException e) System.out.println(e); 5主要功能设计流程5.1 服务器端设计流程图客户端呼叫服务器服务器端得到S o c k e t 对象创建输入输出数据流S w i t h客户端发 S Q L命令到服务器S Q L 命令以“ S E L E C T ” 开头将查询结果发送到客户端S Q L 命令以“ I N S E R T ” 开头S Q L 命令以“ D E L E T E ” 开头开始结束输入要查询
17、内容输入要插入内容输入要删除内容数据库连接是否成功是否成功 是否成功 是否成功YNN N NY Y Y图 3-11 服务端设计流程图5.2 客户端设计流程图服务器端运行起来客户端运用套接字连接服务器端用户操作查询 、删除 、 更新 、 添加数据库的界面得到 S Q L 命令客户端发送该S Q L 命令到服务器端接收服务器端发送来的结果开始结束连接是否成功Y连接是否成功YN N图 3-12 客户端设计流程图6代码实现6.1 类之间关系图D a t a b a s e C l i e n tC h o i c e C h e c k b o x T e x t A r e a S o c k e
18、t图 3-13 客户端类之间的组合关系D a t a b a s e S e r v e rS o c k e tS e r v e r S o c k e t S e r v e r T h r e a d图 3-14 服务器端类之间的组合关系6.2 运行效果图图 3-15 登陆界面运行效果图图 3-16 操作界面运行效果图图 3-17 添加书目效果图图 3-18 删除书目效果图6.3 程序打包发布过程6.3.1、服务器端服务器端程序在命令行窗口运行,不需要打包。6.3.2、客户端(1)将 DatabaseClient.java 的源文件保存到和服务器代码所在的同一台计算机中的某一目录中,同
19、时编译这个 Java 源文件。(2)编写加载 applet 的 html 文件:index.html。当浏览器使用index.html 加载 applet 时,该 applet 将从 index.html 获取表名、字段名以及字段的数目。由于大部分数据库的字段名经常使用若干个字母作为一个字段的名字,因此,为了让用户查询方便,index.html 文件不仅向 applet 提供字段名而且提供字段的易读理解。index.html(3)将 index.html 文件保存到和 DatabaseClient 主类所在相同目录中。(4)如果没有将 index.html 所在的目录设置为 Web 共享。可使
20、用浏览器以打开文件方式打开 index.html;如果没有安装浏览器也可以使用 appletviewer运行 index.html。Appletviewer index.html(5)可以用 Web 发布管理器,比如,IIS 或 Tomcat,将含有 Java Applet 网页所在的目录设成 Web 服务目录。例如,将 index.html 所在的文件夹设为 Web服务目录,虚拟目录名称是 hello,那么其他用户就可以在其浏览器的地址栏中输入该服务器的 IP 地址、虚拟目录名称访问含有 Java Applet 的网页,如http:/192.168.0.100/hello/index.htm
21、l。也就是说,Java Applet 的字节码文件会下载到客户端,由客户端的浏览器负责运行。7总结与说明到目前为止,我们学过了 几种语言了,如果要我们弄出表格直接用代码的话,那样就费神、费力、费时了,所以我们也要学会使用数据库系统,目前我们接触的也只有两种 Acess 和 SQL Server,本图书馆管理系统使用的就是SQL Server 2005。要想要把整个系统完成的话,我们必须要熟悉 SQL Sserver 2005 的各种功能和操作,要会连接服务器、新建数据库和表格,但是我们如果有现成的其他数据源的数据库,也可以将次数据源的表格导入到我们新建的数据库中,这样也为我们省下了很多的时间。建立完数据库后,我们还得要将新建的数据库设置数据源,这样才能使图书馆管理系统正常运行和查询。编写完这个图书馆管理系统,我发现自己有很多的不足,我想如果让我来单独来编写这个系统,我感觉很吃力,因为这个系统涉及到好多算法和技巧。感触最深的就是我们真的要扎扎实实的打基础!成功与失败其实没有界限,失败是成功的基石! 8部分原代码(见附录 3)