基于Java图书查询系统的设计及实现
作者:田绪安,苏林茂,王红梅
来源:《现代电子技术》2010年第11
        :针对多种图书查询系统的优缺点,研究了面向对象的网络编程语言Java的网络类库文件,利用Socket套接字实现图书信息查询系统的设计。依据网络编程方法和数据库特性,给出了实现图书信息查询系统的方法,设计过程中的关键技术和开发中需要注意的问题,以及数据库的驱动和连接方法。最后给出服务器端和客户端核心代码作为参考。与其他查询系统比较,该系统更加方便和快捷。
        关键词:Socket; 数据库; Java; 查询
        中图分类号:TP311 文献标识码:A
        文章编号:1004-373X(2010)11-0138-03
        Design and Implementation of Books Inquiry System Based on Java
        TIAN Xu-an1, SU Lin-mao1, WANG Hong-mei2
        (1. Xi’an Communications Institute, Xi’an 710106, China; 2. The Second Communication Corps of the Lanzhou Military Region, Urumqi830002, China)
        Abstract: The design of the books information inquiry system is realized by the Socket, according to the advantages and shortcomings existed in the various books inquiry systems, and the network library files of the object-oriegnted network programming language Java is researched.The realization of books information inquiry system, the key technique in the design process and the problems in development, the driven and joint means of database were given, according to the characteristics of the database and network programming means. It is more convenient and prompt. The core code of the server-side and client-side are showed for reference.
        Keywords: Socket; database; Java; inquiry
        基于Java查询系统的开发目的是为了提高查询效率。选用Java开发工具可以提高查询系统的移植性和兼容性。 系统主要功能是实现读者对图书信息进行准确、快速查阅。
        1 系统结构
        系统采取B/S结构,利用服务器端和客户端的 Socket通信机制完成信息的传递,如图1所示。数据库用来统计图书信息,主要涉及的是信息表格,选用Access实现。
        2 Socket通信分析
        2.1 Socket应用
        网络通过双向通讯连接实现数据交换。Socket用来实现客户端和服务端的连接,它是TCP/IP协议的编程界面,由一个IP地址和一个端口号惟一确定。在Java环境下,Socket编程是基于TCP/IP协议的网络编程。
        2.2 Socket通信过程
        服务器端Listen(监听)某个端口是否有连接请求,客户端向服务器端发出Connect(连接)请求,服务器端向客户端发回Accept(接受)消息,一个连接就建立起来了。服务器端和客户端都可以通过Send,Write等方法与对方通信。
        1 系统结构
        采用Socket套接字把网络连接作为一个流(Stream),通过流读写字节。
        2.3 网络客户和网络服务器的设置
        客户端与服务器端使用约定一致的协议或标准来通信。由于在一个机器上同时运行了多个相同的或不同的网络服务器,因此,端口号可作为约定的标准或协议的一部分,以便客户机定位服务器。
        网络服务器绑定在某一端口上,监听新的连接。服务器允许客户端建立一个相对持久的连接,在这个链接的生命周期中,客户端不断请求服务器的服务,直到客户端显示断开这个连接。
        3 查询系统的设计方案
        查询系统分为服务器端和客户机端两部分。首先执行服务器端程序,然后监听本地IP地址上指定的端口,并发生阻塞,等待客户端程序的连接请求;接着,客户端程序启动,向指定的服务器发送连接请求;当服务器端得到客户端程序的连接请求后,与客户端程序建立连接,并向客户端程序返回其IP地址。
        3.1 服务器端的设计步骤
        (1) 创建一个等待连接的ServerSocket对象。
        (2) 调用ServerSocket对象的accept()方法侦听接受客户端的连接请求。当侦听到一个客户的请求时,连接成功,并返回一个Socket对象。
        (3) 创建与Socket对象绑定的输入输出流,并建立相应的数据输入输出流。
        (4) 通过数据输入输出流与客户端进行数据读写,完成双向通信。
        (5) 当客户端断开连接时,关闭各个流对象,结束通信。
        3.2 服务器端的设计步骤
        (1) 创建指定服务器上指定端口号的Socket对象。
        (2) 创建与Socket对象绑定的输入输出流,并建立相应的数据输入输出流。
        (3) 通过数据输入输出流与服务器端进行数据读写,完成双向通信。
        (4) 通过调用close()方法关闭与服务器端的连接,并关闭各个流对象,结束通信。
        4 数据库的驱动和连接
        采用jdbc-odbc桥实现库的驱动和连接,完成数据库的连接并返回该连接。如图2所示。
        4.1 建立Access数据库
        (1) 建立Access数据库db.mdb并创建bookform表。
        (2) 打开控制面板管理工具数据源(ODBC),选择系统DSN”,单击添加”,选择“Driver do Microsoft Access (*.mdb)”,点击完成”,弹出的对话框里将数据源名基于java的图书管理系统一项给数据源取名,点击选择”,到刚刚建立的数据库文件db.mdb,ODBC数据源配置完成。
        2 库的驱动和连接
        4.2 Access数据库的连接
        JDBC独立于具体的关系数据库。 JDBC API与数据库交互并处理所得的结果,通过SQL语句或存储在数据库中的过程(stored procedures)来存取数据。
        通过JDBC来存取某一特定的数据库时,JDBC driver是连接JDBC API与具体数据库之间的桥梁。Java程序首先使用JDBC API来与JDBC Driver Manager交互,JDBC Driver Manager载入指定的JDBC drivers, 之后就可以通过JDBC API存取数据库。使用driver需要每个客户端机都装上数据库对应的ODBC driver
        数据库的连接过程如下所述:
        首先使用Java Class类中的forName静态方法加载驱动程序:
        Class.forName(″sun.jdbc.odbc.JdbcOdbcDriver″);
        然后连接数据库,需要用java.sql包中的Connection类声明一个对象,再用类DriverManager调用它的静态方法getConnection创建这个连接;
        最后创建Statement对象,利用Statement对象来传送并执行SQL命令。
        5 核心代码参考
        5.1 服务器端程序
        服务器端程序如下:
        public static void main(String args[]) {
        ServerSocket server=null;
        Server_thread thread;
        Socket you=null;
        while(true) {
        try {
        server=new ServerSocket(6666);
        }catch(IOException e1) {
        System.out.println(″正在监听″); }
        try {
        you=server.accept(); }
        catch(IOException e){}
        if(you!=null) {
        new Server_thread(you).start();
        } else {continue;}
        5.2 客户端程序
        客户端程序如下:
        try
        {socket=new CodeBase().getHost(),6666);
        in=new InputStream());
        out=new OutputStream());
        }
        catch(IOException ee)
        {提示条.setText(″连接失败″);}
        if(socket!=null)
        {InetAddress InetAddress();
        提示条.setText(″连接:″+address+″成功″);}
        if(thread==null)
        {thread=new Thread(this);
        thread.start();
        }