收藏 分享(赏)

Java程序设计18067.doc

上传人:dzzj200808 文档编号:2722729 上传时间:2018-09-26 格式:DOC 页数:52 大小:798.01KB
下载 相关 举报
Java程序设计18067.doc_第1页
第1页 / 共52页
Java程序设计18067.doc_第2页
第2页 / 共52页
Java程序设计18067.doc_第3页
第3页 / 共52页
Java程序设计18067.doc_第4页
第4页 / 共52页
Java程序设计18067.doc_第5页
第5页 / 共52页
点击查看更多>>
资源描述

1、Java 程序设计报告课程名称 Java 程序设计 课题名称 数据库通用查询系统 专 业 网络工程 班 级 1001 学 号 201003120110 姓 名 杨永辉 指导教师 李远辉 2013 年 3 月 17 日湖南工程学院Java 程序设计任务书课程名称 Java 程序设计 课 题 数据库通用查询系统 专业班级 网工 1001 学生姓名 杨永辉 学 号 201003120110 指导老师 李远辉 审 批 任 务下达日期 2013 年 3 月 4 日任 务 完 成 日 期 2013 年 3 月 15 日0Java 程序设计任务书1 设计内容与设计要求1.1 设计内容通过 Java 语言设计

2、一个通用数据库查询系统,包括数据库的创建,jdbc 数据库的连接,以及服务端与客户端的设计。其中客户端包含查询系统界面显示的设计。1.2.1Java 程序设计报告规范(1)实训报告内容 需求分析:从功能需求,性能需求,运行环境需求,可靠性需求,安全需求,可扩展性,个性化等方面进行分析。总体设计 包括数据库的建立,查询数据的插入。服务器端和客户端的设计以及用户查询界面的设计详细设计数据库的设计,包括数据库的建立,表的建立,数据源的插入;服务端与客户段设计,包括效果图,UML 图以及程序代码。调试分析包括测试目标,测试数据,测试过程,测试结果等。心得体会参考文献评分表附件包括所有的源程序代码(2)

3、书写格式课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4 大小的图纸及程序清单) 。 正文的格式:一级标题用 3 号黑体,二级标题用四号宋体加粗 , 三级标题用小四号宋体加粗,正文用小四号宋体;行距为 22。11.2.2 考核方式指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神和设计报告等进行综合考评,并按优秀、良好、中等、及格和不及格五个等级给出每位同学的课程设计成绩。具体考核标准包含以下几个部分:(1)平时出勤 (占 10%)(2)原理阐述,拓扑结构,交换设备配置合理与否(占 10%)(3)实验结果是否正确(占 40%)(4)设计报告(占 30%

4、)注意:不得抄袭他人的报告(或给他人抄袭) ,一旦发现,成绩为零分。(5)独立完成情况(占 10%) 。1.2.3 课程验收要求(1)运行所设计的系统。(2)回答有关问题。(3)提交课程设计报告。2 进度安排第 二周星期一 8:3011:30 上机 星期二 14:3017:00 上机 星期一 8:3011:30 上机 星期四 14 :3017:00 上机 星期四 8:3011:30 上机第 三 周星期一 8:3011:30 上机 星期一 14:3017:00 上机星期一 8:3011:30 上机 星期一 14:3017:00 上机星期一 8:3011:30 上机2数据库通用查询系统主要内容:1

5、 设计要求当仅仅查询数据库表中的记录时,我们可以不必知道表中字段的属性,因为无论字段还是何种属性,总可以使用 getString(int columnIndex)或getString(String columnName)方法返回字段值的字符串表示。另外,无论字段是何种属性,SQL 语句的 LIKE 子语句允许字段值以字符串形式与其他字符串进行匹配比较。基于以上所述,要求设计一个 B/S 模式的数据库通用查询系统,具体要求如下:(1)客户端 Java Applet 程序从加载该 Java Applet 程序的 html 文件中获取数据库中的表的名字、表的字段名字以及表中字段的个数。这样一来,当需

6、要修改html 文件,而不必修改 Java Applet 程序,使得 Java Applet 在查询数据库时具有了通用性。(2)Java Applet 通过套接字连接和服务器端的 Java 应用程序实现通信。Java Applet 程序将表的名字、表中字段的个数以及查询条件提交给服务器,服务器端的 Java 应用程序进行查询操作,并将查询结果返回 Java Applet 程序。32 总体设计在设计数据库通用查询系统时,需要编写 3 个 Java 源文件:DatabaseServer.java、ServerThread.java 和 DatabaseClient.java。其中DatabaseS

7、erver.java 和 ServerThread.java 为服务器端 Java 程序编译产生所需要的类;DatabaseClient.java 为客户端 Java Applet 程序编译产生所需要的类。数据库通用查询系统除了需要编写 3 个 Java 源文件所编译产生的类外,还需要 Java 系统提供的一些重要的类。数据库通用查询系统所用到的一些重要的类以及它们之间的组合关系如图 2.1 和图 2.2 所示。图 2.1 客户端之间的组合关系图 2.2 服务器端之间的组合关系Choice Checkbox TextArea SocketDatabaseServerServerSocketDa

8、tabaseClientSocket ServerThread4另外,为了调试代码的需要,我们用 Microsoft Access 设计了名为 mysql 的数据库。2.1 数据库(服务器端)设计的数据库的名字是 mysql,在该库中所创建的表是 bookform。见详细设计12.2 DatabaseServer.java(服务器端主类)DatabaseServer 类创建的对象负责响应客户请求,该类含有 main 方法,服务器端从该类开始执行。DatabaseServer 类的成员变量中有 3 种重要类型的对象:ServerSoket、Soket 和 ServerThread 对象。运行效果

9、如下图 2.2.1 所示图 2.2.1 DatabaseServer 类运行效果2.3 ServerThread.java(服务器端)ServerThread 类是 Thread 类的子类,在 Server 类中负责为请求连接的用户启动一个线程对象。2.4 DatabaseClient.java(客户端主类)DatabaseClient 是 Applet 类的子类,尽管 DatabaseClient 类需要驻留在服务器端,但它需要下载到客户端的浏览器来运行,因此 Java Applet 是客户端程序。DatabaseClient 类的成员变量中有四种重要类型的对象:Choice、Checkbo

10、x 、TextArea 和 Socket 对象。DatabaseClient 类的主要成员的作用将在后面的详细设计中阐述,ClientWindow 类创建的 Applet 以及主要成员对象如下图 2.2.2 所示:5图 2.2.2 DatabaseClient 创建的 Applet 及主要的成员对象3 详细设计3.详细设计3.1 数据库的设计JDBC 操作不同的数据库仅仅是连接方式的不同,我们使用 mysql 数据库创建一个名为 book.mdb 的数据库,驱动是:com.mysql.jdbc.Driver。3.1.1 建立数据库选择 mysql 并启用它。然后进入 sql 编辑器新建数据库。

11、将新建的数据库系统命名为 book.mdb。命令为:create table bookform3.1.2 创建表创建好数据库后,就可以在该数据库中建立若干个表。在 book.mdb数据库中创建命名为 bookform 的表。Bookform 表的字段为:ISBN(文本) 、name(文本) 、author(文本) 、publisher(文本) 、6date(日期) 、price(数字)3.1.3 插入数据进入 mysql 的编辑器在 bookform 中在刚才创立的数据库中添加ISBN(文本) 、name(文本) 、author(文本) 、publisher(文本) 、date(日期) 、pr

12、ice(数字)各项的具体内容。3.2 DatabaseServer 类(1) 效果图DatabaseServer 类驻留在服务器端,DatabaseServer 类运行效果如图 2.2.1 所示(2)uml 图DatabaseServer 类是数据库通用查询系统服务端的主类,负责响应客户的连接请求、建立和客户的套接字的连接,并负责在服务器端查询数据库。标明DatabaseServer 类的主要成员变量、方法的 UML 图如 3.2.1 所示:图 3.2.1 DatabaseServer 类的 UML 图以下是 UML 图中有关数据和方法的详细说明。(1) 成员变量a、 server 是 Ser

13、verSocket 对象,负责等待接受客户的套接字的请求,当有客户请求套接字连接时,server 将接受用户的请求,并调用DatabaseServerServer:ServerSocketYou:SocketYourAddress: InetAddressDatabaseServer():无类型startServer(int):voidmain(String ):void7accept()方法返回服务器端所建立的 Socket 对象 you,即建立服务器端套接字和客户端套接字的连接。b、 you 是 Socket 对象,该对象是驻留在服务器端的套接字的对象,由server 调用 accept(

14、)方法所返回。c、 yourAddress 是 InetAddress 对象,负责存放客户端 IP。(2) 方法a、 DatabaseServer()是构造方法。b、 DatabaseServer 对象调用 startServer(int port)方法响应客户的请求。c、 Main 方法是程序运行的入口方法。(3) DatabaseServer 类的代码import .*;import java.util.*;import java.io.*;public class DatabaseServerServerSocket server;Socket you;InetAddress yourA

15、ddress;public DatabaseServer()try Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);catch(ClassNotFoundException e)System.out.println(e);System.out.println(“我是服务器端程序,负责处理用户的连接请求“); public void startServer(int port)while(true) tryserver=new ServerSocket(port);8catch(IOException e1) System.out.println(“正在

16、监听:“); try System.out.println(“等待用户呼叫.“);you=server.accept(); yourAddress=you.getInetAddress();System.out.println(“客户的 IP:“+yourAddress);catch (IOException e)if(you!=null) new ServerThread(you).start(); else continue;public static void main(String args)DatabaseServer server=new DatabaseServer();serv

17、er.startServer(6666); 3.3 ServerThread 类(1)效果图ServerThread 类驻留在服务器端,没有可显示的效果图。(2)UML 图ServerThread 类是 Thread 类的子类,当 Server 对象调用 startServer()方法和一个请求套接字连接的用户建立套接字连接后,就使用 ServerThread 创建一个专门为该用户服务的线程。标明 Server 类的主要成员变量、方法以及和9DatabaseServer 类之间组合关系的 UML 图如图 3.3.1 所示:图 3.3.1ServerThread 类的 UML 图以下是 UML

18、图中有关数据和方法的详细说明。(1) 成员变量a、 con 是 Connection 对象负责和数据库建立连接。b、 stmt 是 Statemnet 对象,负责向数据库发送 SQL 语句。c、 rs 是 ResultSet 对象,负责存储从数据库查询到的记录。d、 socket 是 Socket 的对象。e、 yourAddress 是 InetAddress 对象,负责存放客户的 IP。(2) 方法a、 SeverThread(Socket)是构造方法,当使用该构造方法创建线程时,通过该方法的参数将 Sever 类中的 you 对象传递给ServrThread 类中的 socket。b、

19、run()方法是 ServerThread 类中重写父类 Thread 的方法,给出了怎样响应用户请求的具体内容。(3) ServerThread 类的代码import java.io.*;import .*;import java.util.*;ThreadServerThreadServerThread(Socket,InetAddress ,LinkedListlist ):无类型Run(): voidCon: ConnectionStmt:Statementrs:ResultSetDatabaseServerNew ServerThread()Socket:SocketyourAddr

20、ess:InetAddress10import java.sql.*;public class ServerThread extends ThreadInetAddress yourAddress;Socket socket=null;DataOutputStream out=null;DataInputStream in=null;Connection con=null;Statement stmt=null;ResultSet rs;int number;ServerThread(Socket t)socket=t;try con=DriverManager.getConnection(“

21、jdbc:odbc:myDataSouce“,“,“);stmt=con.createStatement();catch(SQLException e)System.out.println(e);try in=new DataInputStream(socket.getInputStream();out=new DataOutputStream(socket.getOutputStream();catch (IOException e) public void run() String s=“;int N=0; while(true)trys=in.readUTF();System.out.p

22、rintln(s);11if(s.startsWith(“字段个数:“)String number=s.substring(s.lastIndexOf(“:“)+1);N=Integer.parseInt(number);elseString sqlCondition=null;String 表名=“,查询内容=“,字段=“,查询方式=“;StringTokenizer fenxi=new StringTokenizer(s,“:“);if(fenxi.hasMoreTokens()表名=fenxi.nextToken(); if(fenxi.hasMoreTokens()查询内容=fenxi

23、.nextToken(); if(fenxi.hasMoreTokens()字段=fenxi.nextToken();if(fenxi.hasMoreTokens()查询方式=fenxi.nextToken(); if(查询方式 .equals(“完全一致“)sqlCondition=“SELECT * FROM “+表名 +“ WHERE “+字段+“ LIKE “+“+查询内容+“ “;else if(查询方式.equals(“ 前方一致 “)sqlCondition=“SELECT * FROM “+表名 +“ WHERE “+字段+“ LIKE “+“+查询内容+“% “; else

24、if(查询方式.equals(“ 后方一致 “)sqlCondition=“SELECT * FROM “+表名+ “ WHERE “+字段+“ LIKE “+“%“+查询内容+“ “; 12else if(查询方式.equals(“ 中间包含 “)sqlCondition=“SELECT * FROM “+表名 +“ WHERE “+字段+“ LIKE “+“%“+查询内容+“% “;try rs=stmt.executeQuery(sqlCondition);number=0;while(rs.next()number+;StringBuffer buff=new StringBuffer

25、();for(int k=1;k0)try out.writeUTF(“字段个数:“+N);out.writeUTF(formName+“:“+查询内容+“:“+ 字段+“:“+查询方式);19catch(IOException e1)提示条.setText(“与服务器已断开“); else输入查询内容.setText(“请输入内容“); 4 代码调试5 软件开发6 课程设计题目软件效果图:数据库通用查询系统(B/S)的客户端和服务器端的运行效果如图 1.0 所示:(a )服务器端运行效果(b)客户端运行效果图 1.0 数据库通用查询系统运行效果2.1 设计的内容、要求和目标2.2 总体设计图

26、 2.4 DatabaseClient 创建的 JFrame 及主要的成员对象 3 详细设计及实现3.1 操作界面设计(a) 客户端运行效果20(b)服务器端运行效果3.2 类成员变量及方法设计图 12.1 N-S 流程图(1)数据库设计JDBC 操作不同的数据库仅仅是连接方式上的不同,我们使用 Microsoft Access 数据库管理系统创建一个名字为 book.mdb 的数据库。建立数据库选择 Windows 2000/XP 系统桌面上的“开始”“所有程序”Microsoft Access 命令,启动数据库管理系统。然后选择新建数据库。将新建的数据库命名为 book.mdb,并保存到

27、D:ch12 目录中。创建表创建好数据库后,就可以在该数据库下建立若干个表。在 book.mdb 数据库中创建名为 bookform 的表。 Bookform 表的字段(属性)为:ISBN(文本) name(文本) publisher(文本) ,data(日期) price(数字)其中 ISBN 字段为主键。设置数据源选择“控制面板”“管理工具”“ODBC 数据源”命令。双击ODBC 数据源图标,将 book.mdb 设置为名字是 myDataSource 的数据源。(2)DatabaseServer 类成员变量server 是 ServerSocket 对象,负责等待接受客户的套接字请求,当

28、有客户请求套接字连接时,server 将接受用户的请求,并调用 accept()方法返回服务器端所21建立的 Socket 对象 you,即建立服务器端套接字和客户端套接字的连接。you 是 Socket 对象,该对象是驻留在服务器端的套接字对象,由 server 调用accept()方法所返回。yourAddress 是 InetAddress 对象,负责存放客户端的 IP。方法DatabaseServer()是构造方法。 DatabaseServer 对象调用 startServer(int port)方法响应客户的请求。main 方法是程序运行的入口方法。(3)ServerThread

29、类成员变量con 是 Connection 对象,负责和数据库建立连接。stmt 是 Statement 对象,负责向数据库发送 SQL 语句。rs 是 ResultSet 对象,负责存储从数据库查询到的记录。socket 是 Socket 对象。yourAddress 是 InetAddress 对象,负责存放客户端的 IP。方法ServerThread(Socket)是构造方法,当使用该构造方法创建线程时,通过该方法的参数将 Server 类中的 you 对象传递给 ServerThread 类中的 socket。run()方法是 ServerThread 类重写父类 Thread 的方法

30、,给了怎么响应用户请求的具体内容。(4)DatabaseClient 类成员变量choice 是 Choice 创建的下拉列表,负责存放数据库表的字段的文本解释。“完全一致” 、 “前方一致” 、 “后方一致”和“中间包含”是 checkbox 创建的单选框,为用户提供选择查询方式。“显示查询结果”是 TestArea 类创建的文本区,负责显示查询到的记录。socket 是 Socket 套接字对象,负责呼叫服务器并建立套接字连接。方法浏览器内置的 JVM 用 DatabaseClien 创建 applet 后,立刻通知这个 applet 调用22init()方法完成必要的初始化工作,其主要工

31、作是从加载 applet 的 html 中获取表的名字以及字段的名字个数量。applet 调用 init()方法后,调用 start()方法,其主要操作是呼叫服务器建立套接字连接。applet 所在的 Web 页面转到其他页面然后又返回,start()将再次被调用。当 applet 所在的页面转到其他页面时,applet 将调用 stop()方法,其主要是中断和服务器的套接字连接。 run()方法是 DatabaseClient 类实现的 Runnable 接口中的方法,负责读取从服务器查询到的记录。3.3 数据库设计JDBC 操作不同的数据库仅仅是连接方式上的不同,我们使用 Microsof

32、t Access数据库管理系统创建一个名字为 book.mdb 的数据库。(1)建立数据库选择 Windows2000/XP 系统桌面上的开始 所有程序Microsoft Access 命令,启动数据库管理系统,然后选择新建数据库。将新建的数据库命名为 book.mdb,并保存到程序所在的文件夹中。(2)创建表创建好数据库后,就可以在该数据库下建立若干个表。在 book.mdb 数据库中出创建名字为 bookform 的表。Bookform 表的字段(属性)为:ISBN(文本)name(文本) author(文本) publisher(文本)data(日期) price(数字)其中ISBN 字

33、段为主键。(3)设置数据源选择“控制面板”-“管理工具”-“ODBC 数据源”命令。双击 ODBC 数据源图标,将 book.mdb 设置为名字是 myDataSouce 的数据源。3.4 源代码分析3.4.1 DatabaseServer 类import .*;import java.util.*;23import java.io.*;public class DatabaseServerServerSocket server;Socket you;InetAddress yourAddress;public DatabaseServer()try Class.forName(“sun.jd

34、bc.odbc.JdbcOdbcDriver“);catch(ClassNotFoundException e)System.out.println(e);System.out.println(“我是服务器端程序,负责处理用户的连接请求“); public void startServer(int port)while(true) tryserver=new ServerSocket(port);catch(IOException e1) System.out.println(“正在监听:“); try System.out.println(“等待用户呼叫.“);you=server.acce

35、pt(); yourAddress=you.getInetAddress();System.out.println(“客户的 IP:“+yourAddress);catch (IOException e)if(you!=null) new ServerThread(you).start();24 else continue;public static void main(String args)DatabaseServer server=new DatabaseServer();server.startServer(8731); 3.4.2 ServerThread 类import java.

36、io.*;import .*;import java.util.*;import java.sql.*;public class ServerThread extends ThreadInetAddress yourAddress;Socket socket=null;DataOutputStream out=null;DataInputStream in=null;Connection con=null;Statement stmt=null;ResultSet rs;int number;ServerThread(Socket t)socket=t;try con=DriverManage

37、r.getConnection(“jdbc:odbc:myDataSouce“,“,“);stmt=con.createStatement();25catch(SQLException e)System.out.println(e);try in=new DataInputStream(socket.getInputStream();out=new DataOutputStream(socket.getOutputStream();catch (IOException e) public void run() String s=“;int N=0; while(true)trys=in.rea

38、dUTF();System.out.println(s);if(s.startsWith(“字段个数:“)String number=s.substring(s.lastIndexOf(“:“)+1);N=Integer.parseInt(number);elseString sqlCondition=null;String 表名=“,查询内容=“,字段=“,查询方式=“;StringTokenizer fenxi=new StringTokenizer(s,“:“);if(fenxi.hasMoreTokens()表名=fenxi.nextToken(); if(fenxi.hasMoreT

39、okens()查询内容=fenxi.nextToken(); if(fenxi.hasMoreTokens()字段=fenxi.nextToken();if(fenxi.hasMoreTokens()查询方式=fenxi.nextToken(); 26if(查询方式 .equals(“完全一致“)sqlCondition=“SELECT * FROM “+表名+“ WHERE “+字段+“ LIKE “+“+查询内容+“ “;else if(查询方式.equals(“ 前方一致 “)sqlCondition=“SELECT * FROM “+表名+“ WHERE “+字段+“ LIKE “+“

40、+查询内容+“% “; else if(查询方式.equals(“ 后方一致 “)sqlCondition=“SELECT * FROM “+表名 + “ WHERE “+字段+“ LIKE “+“%“+查询内容+“ “; else if(查询方式.equals(“ 中间包含 “)sqlCondition=“SELECT * FROM “+表名+“ WHERE “+字段+“ LIKE “+“%“+查询内容+“% “;try rs=stmt.executeQuery(sqlCondition);number=0;while(rs.next()number+;StringBuffer buff=n

41、ew StringBuffer();for(int k=1;k=N;k+)buff.append(rs.getString(k)+“ “);out.writeUTF(“n“+new String(buff);if(number=0)27out.writeUTF(“n 没有查询到任何记录n“);catch(SQLException ee) out.writeUTF(“+ee);catch (IOException e) try socket.close();con.close(); catch(Exception eee)System.out.println(“客户离开了“);break; 3.4.3 DatabaseClient 类import .*;import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class DatabaseClient extends JFrame implements Runnable,ActionListenerString formName; /数据库中的表名JTextField 输入查询内容; Choice choice; Checkbox 完全一致,前方一致,后方一致,中间包含;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报