亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

用JDBC開發基于客戶/服務器模式的Internet/Intranet數

2019-11-18 12:40:12
字體:
來源:轉載
供稿:網友

  1、概述
  
  隨著Internet/Intranet的普及以及WEB技術的發展,人們對信息的需求越來越強烈,數據庫與Internet/Intranet應用軟件的集成已經成為了非常迫切的問題。互聯網上數據庫產品的復雜,有限的帶寬,以及互聯網上軟件產品的跨平臺性,將是我們碰到的最大困難。本文通過作者的工作實踐,介紹了JDBC規范及應用java的SOCKET機制,以及JAVA的客戶/服務器計算模式,最后根據以上的原理,實現了一個簡單的基于客戶/服務器的JAVA查詢遠端服務器上的數據庫的小例子。
  
  2、問題提出
  
  當我從事Internet/Intranet軟件開發時,為了達到很好的兼容性,安全性以及跨平臺性,不得不采用JAVA編程,但是JAVA數據庫方面的不足,確實眾所周知。雖然JDBC技術在一段時間以前就已經發布了,但是對于大多數數據庫產品而言,卻要為其編制非凡的驅動。雖然有一些數據庫廠商用JAVA編寫了自己產品的驅動(如IBM的DB2數據庫軟件),但是這類產品的價格和復雜的使用方法卻是使一些中小企業和Internet愛好者們望而卻步,另外,在有限的帶寬下如何減少數據的流量等一系列問題,將是解決這類問題的最大的絆腳石。因此,我們必須解決這類問題,并且產生一個跨平臺性的,能掛接多種數據庫的,基于客戶/服務器的軟件解決方案。
  
  3、分析問題
  
   
  
  以上的問題我們可以用JAVA的Socket機制實現客戶/服務器,然后在服務器端用JDBC來完成客戶端所提交的查詢要求,因此,將問題分為如下兩個方面。
  
 ?。?)JAVA中的Socket機制
  
   
  
  在各種網絡的客戶/服務器應用中,客戶與服務器之間的通訊機制是多種多樣的,但大多數都采用的是基于TCP/ip的Socket機制來完成的,Socket是兩個程序間用來進行雙向傳輸的網絡通訊端點,在服務器程序方面通過IP在網絡中標識自己,然后,通過一個客戶端程序知道的端口號來提供服務,而客戶端在網絡中通過服務器的IP來找到服務器,通過連接他的端口號來獲得服務器的某項服務。當然,計算機也擁有一些內置的用來提供其他服務的端口和空閑的端口,這樣這些空閑端口就可供程序員來使用。由于Socket通訊機制是一種較為底層的通訊機制,所以通過Socket的數據表示是一種原始的字節流信息。那么客戶端 服務器的程序就應該按照程序員制定的一種約定來進行數據的格式化處理后才能進行具體的應用,這種約定實際上就是一種協議。
  
  Socket通訊機制提供了兩種通訊方式,一種是有連接的,另一種是無連接的。有連接的方式是指程序在開始時,雙方就建立了連接,形成了一條通訊鏈路,這條通訊鏈路一直存在,直到任意一方終止連接為止。在連接的同時,雙方就通過這個通訊鏈路進行I/O操作,這種方式是可靠的而且是全雙工的。無連接的方式是指提供不可靠的連接,數據傳送時是以數據報的方式發送,類似與我們的寄信。本文采用的為有連接方式。
  
  JAVA在現實中有兩個類用于Socket連接,一個是ServerSocket類,應用于服務器方;一個是Socket,應用于客戶方。在服務器端用如下語句對端口進行初始化及監聽:
  
  try{
  
  ServerSocket server=new ServerSocket(9001);//監聽9001端口,此端口不能與系統的
  
  //端口號沖突
  
  Socket socket=server.accept();//阻塞進程,一旦有客戶連接初始化socket類
  
  DataInputStream in=new DataInputStream(socket.getInputStream()); //建立輸入流
  
  PRintStream out=new PrintStream(socket.getOutputStream()); //建立輸出流
  
  }catch(IOException e){}
  
  在客戶端用如下語句即可與服務器連接:
  
  try{
  
  socket=new Socket(hostname,9001);//連接以hostname的服務器,端口號為9001
  
  //這里的hostname為服務器的IP地址
  
  in=new DataInputStream(socket.getInputStream());//初始化輸入流
  
  out=new PrintStream(socket.getOutputStream());//定義輸出流
  
  }catch(IOException e){}
  
  通過以上語句后,在客戶與服務器之間就建立了in和out這兩個輸入和輸出流,那么就可以進行通信了。最后,為了在服務器端能響應多個客戶端的請求,在服務器的輸入和輸出流的處理中應用了多線程,是每一個線程對應一個客戶端的服務,由于JAVA的內存治理是一種摾瘮治理,當某一個客戶的連接斷開后,服務器程序分配給這一個客戶的線程的資源就會被自動收回。其多線程的語句如下:
  
   
  
  new ServerThread(clientname,clientcount,socket).start();
  
  //初始化一個新的ServerThread類(注:ServerThread類為程序的一個線程類
  
  在以上的語句中clientcount為傳給ServerThread類的線程號。
  
  經過以上的語句后,客戶端與服務器端之間就建立了聯系,而且實現了多線程。
  
   
  
  (2)JDBC淺析。
  
  隨著JAVA的興起,JAVA的子公司JAVASOFT為了實現JAVA存取數據庫而提供了一套數據庫連接規范JDBC(JAVA DATABASE CONNECTIVITY)有一些數據庫廠商根據這個數據庫規范開發了自己的數據庫JAVA的API,但這些在價格和使用的復雜度方面往往讓人難以接受。另外,由于這些API增加了很多功能,是基于瀏覽器的JAVA APPLET加載的速度變慢而且影響了速度。而本程序是為一定需要而設計的故代碼很小,執行速度相對加快。
  
  JAVA為了實現數據庫的連接而推出了JDBC規范,JDBC設計是基于X/OPEN SQL CLI(CALL LEVEL INTERFACE)這一模型,定義了一組API對象和方法,程序員可以使用這些API與數據庫程序進行交互。JDBC API是一個應用于數據庫的接口,用來解釋和執行來自應用程序中的SQL語句,并返回結果集。它可以全部用JAVA寫作為APPLET的一部份下載,又可以是一種本地模塊與現有的數據庫連接。如SUN和INTERSOLV合作開發的JDBC-ODBCBRIDGE就是一種通過JDBC來訪問機器上的已定義的ODBC數據源,JDBC-ODBCBRIDEG可以通過在JDBC和ODBC之間建立一個橋梁,讓JAVA程序通過JDBC來訪問ODBC中的數據源。
  
  在JDK1.1.5以上的版本中已經包含了JDBC-ODBCBRIDGE,讀者如沒有也可從SUN的網站上下載。在我們的程序中即是采用了這一種方式來實現對各種ODBC數據源的訪問的。下面我們簡要的介紹一些本套程序要用到的一些基本的類,讀者如想獲得更多的幫助可以察看SUN JDBC的幫助文檔。
  
  DriverManager類用于處理驅動程序的裝入。使用該類來定義一些程序中使用的所要連接的驅動,在本程序中就是JDBC-ODBCGRIDGE;
  
  Connection類定義了一個到特定數據庫的連接。當程序定義了驅動以后,就要與數據庫建立連接,該類將完成這些工作;
  
  Statement類提供了一個執行SQL語句的容器。用來提交一個SQL查詢;
  
  ResultSet類用于控制結果類的存取。其作用是獲得查詢結果的一些信息,如結果的紀錄數,字段數,字段名,結果集等與結果相關的信息。
  
  (注重!由于本程序意在介紹編程方法和思想,所以JDBC的一些具體類的使用方法不屬于本文的范疇。有關其中具體的使用方法將會在后面程序中寫出。)
  
  四、程序實現
  
  本套示例程序采用客戶/服務器的模式,因此存在客戶端與服務器端兩套程序。下面分別介紹兩套程序的實現方法和程序片斷,完整程序將在后面附上。
  
  (1) 服(2) 務器端程序
  
  作為服務器端的程序,本示例才用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類,用來顯示一些系統

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文字幕在线播放| 欧美日韩激情美女| 成人亚洲激情网| 久久久91精品国产| 国产精品久久久久久久久久99| 亚洲女人天堂av| 亚洲亚裔videos黑人hd| 亚洲精品少妇网址| 97超级碰碰人国产在线观看| 美女扒开尿口让男人操亚洲视频网站| 亚洲天堂av在线播放| 欧美午夜精品在线| 韩剧1988免费观看全集| 国产精品成人播放| 中文字幕在线观看亚洲| 欧美精品激情视频| 欧美激情视频在线免费观看 欧美视频免费一| 久久伊人精品一区二区三区| 亚洲国产精品va在线看黑人| 亚洲国产精品va在线| 欧美一级片久久久久久久| 久久精品久久久久久国产 免费| 日韩综合中文字幕| 97在线看免费观看视频在线观看| 国产美女精品免费电影| 国产精品丝袜视频| 国产成人精品优优av| 亚洲美女视频网| 亚洲欧洲在线播放| 亚洲欧美国产精品va在线观看| 日韩美女视频免费在线观看| 欧美—级a级欧美特级ar全黄| 欧美裸体xxxxx| 精品国内产的精品视频在线观看| 久久香蕉精品香蕉| 亚洲色图五月天| 亚洲第一综合天堂另类专| 亚洲精品动漫久久久久| 欧美国产极速在线| 性欧美xxxx视频在线观看| 国外成人免费在线播放| 欧美性jizz18性欧美| 国产精品欧美风情| 色青青草原桃花久久综合| 欧美激情国产日韩精品一区18| 欧美黑人xxx| 青青久久av北条麻妃黑人| 日韩精品免费在线视频观看| 国产精品999| 亚洲一区二区三区四区视频| 奇米成人av国产一区二区三区| 国产v综合v亚洲欧美久久| 国产一区二区精品丝袜| 2021久久精品国产99国产精品| 欧洲精品毛片网站| 国产精品免费在线免费| 亚洲成人免费网站| 亚洲精品久久7777777| 成人国产精品日本在线| 久久在线精品视频| 亚洲男人天堂2023| 亚洲一区二区国产| 日本视频久久久| 亚洲天堂免费在线| 亚洲欧美在线免费| 91精品久久久久久久久久| 欧美激情精品久久久久久大尺度| 92国产精品久久久久首页| 91精品国产综合久久久久久久久| 亚洲成人999| 青青a在线精品免费观看| 国产精品爱啪在线线免费观看| 亚洲国产精品系列| 91成人天堂久久成人| 亚洲国产精品va在看黑人| 亚洲日本成人女熟在线观看| 欧美电影在线免费观看网站| 亚洲男人7777| 欧美怡春院一区二区三区| 欧美午夜女人视频在线| 性欧美暴力猛交69hd| 91国偷自产一区二区三区的观看方式| 国产91|九色| 欧美丝袜美女中出在线| 国产精品嫩草影院久久久| 国内精品久久久久| 国产精品黄页免费高清在线观看| 中文字幕综合在线| 亚洲精品国精品久久99热一| 亚洲欧洲日产国产网站| 亚洲欧洲一区二区三区在线观看| 亚洲福利视频专区| 97在线精品视频| 欧美韩国理论所午夜片917电影| 欧美精品www| 在线视频日本亚洲性| 国产精品免费电影| 永久免费毛片在线播放不卡| 国产一区二区欧美日韩| 日韩av在线看| 成人免费淫片aa视频免费| 91免费看视频.| 亚洲电影免费观看高清完整版在线| 国产91精品在线播放| 成人乱色短篇合集| 国产美女久久精品香蕉69| 日韩精品视频三区| 中文字幕欧美国内| 亚洲一级黄色av| 国产精品久久91| 98视频在线噜噜噜国产| 91免费人成网站在线观看18| 色综合久久88色综合天天看泰| 久久视频免费在线播放| 日韩中文字幕在线看| 久久精品免费电影| 亚洲男人天堂2023| 国产精品亚洲综合天堂夜夜| 久久久久北条麻妃免费看| 日韩视频免费在线| 国产精品美腿一区在线看| 久久久久久97| 日本久久久a级免费| 久久精品免费播放| 精品久久久久久久久中文字幕| 久久躁日日躁aaaaxxxx| 激情久久av一区av二区av三区| 国产精品扒开腿做爽爽爽男男| 欧美日韩国产成人在线观看| 国产精品主播视频| 日韩精品久久久久久福利| 性欧美xxxx视频在线观看| 俺也去精品视频在线观看| 国产日韩欧美在线| 亚洲欧美自拍一区| 久久香蕉国产线看观看av| 这里只有视频精品| 91精品国产成人www| 欧美巨乳在线观看| 欧洲中文字幕国产精品| 国产成人av在线播放| 国产v综合ⅴ日韩v欧美大片| 精品国产一区二区三区久久久狼| 精品国内产的精品视频在线观看| 亚洲精品二三区| 国产精品久久99久久| 91精品国产乱码久久久久久蜜臀| 欧美在线影院在线视频| 精品色蜜蜜精品视频在线观看| 久久成人综合视频| 91香蕉亚洲精品| 国产精品网红直播| 国产日韩精品电影| 成人性生交大片免费看小说| 国产精品免费视频xxxx| 综合激情国产一区| 欧美精品xxx| 国产日韩欧美视频| 麻豆成人在线看| 2018国产精品视频| 国产激情视频一区| 国产精品av在线播放| 亚洲最新av在线网站| 欧美日本中文字幕|