摘 要:針對多種圖書查詢系統的優缺點,研究了面向對象的網絡編程語言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)”,點擊“完成”,彈出的對話框里將“數據源名”一項給數據源取名,點擊“選擇”,找到剛剛建立的數據庫文件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=1;
Server_thread thread;
Socket you=1;
while(true) {
try {
server=new ServerSocket(6666);
}catch(IOException e1) {
System.out.println(″正在監聽″); }
try {
you=server.accept(); }
catch(IOException e){}
if(you!=1) {
new Server_thread(you).start();
} else {continue;}
5.2 客戶端程序
客戶端程序如下:
try
{socket=new Socket(this.getCodeBase().getHost(),6666);
in=new DataInputStream(socket.getInputStream());
out=new DataOutputStream(socket.getOutputStream());
}
catch(IOException ee)
{提示條.setText(″連接失敗″);}
if(socket!=1)
{InetAddress address=socket.getInetAddress();
提示條.setText(″連接:″+address+″成功″);}
if(thread==1)
{thread=new Thread(this);
thread.start();
}
}
public void stop()
{try
{
socket.close();
thread=1;
}
catch(IOException e)
{this.showStatus(e.toString());
}
}
InetAddress類表示一個IP地址。得到通信對方的IP地址后,就可以用Socket或數據報方式與該主機通信。該類只有一個默認的不帶參的構造方法:
static InetAddress getLocalHost();
該構造方法返回一個包含本地主機的IP地址的InetAddress對象。當方法返回一個或多個InetAddress對象的引用時,就可以使用其他非靜態方法得到數據。
6 結 語
基于Java查詢系統是依據網絡編程方法和數據庫特性以及采用Socket套接字實現圖書信息查詢的一種有效方法。該系統與其他查詢系統相比較具有更加方便和快捷的優點,可提高查詢效率。該系統的不足之處是數據庫的連接和驅動相對麻煩一些。
參考文獻
[1]葉樹華.網絡編程實用教程\\.北京:人民郵電出版社,2006.
[2]張汾.圖書館圖書管理系統分析與設計\\.山西電子技術,2002(1):22-27.
[3]譚獻海.網絡編程技術及應用\\.北京:清華大學出版社,2006.
[4]Deitel M H.Java大學教程\\.北京:電子工業出版社,2007.
[5]應東生.Java開發技術全程指南\\.北京:電子工業出版社,2008.
[6]杜佳榮.Java網絡編程技術與實踐\\.北京:清華大學出版社,2008.