国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

一個(gè)JDBC訂購(gòu)系統(tǒng)原型

2019-11-18 12:38:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  本文是Monica Pawlan的"JDK 1.2 Roadmap: Putting It All Together"一文的展開(kāi),它講述了一個(gè)使用SQL命令和JDBC API的快速原型項(xiàng)目背后的故事。這篇文章覆蓋了數(shù)據(jù)庫(kù)表的定義和Swing組件的使用,而且在整個(gè)過(guò)程中給出了詳盡的代碼和大量的屏幕抓圖。
  
  在"JDK 1.2 Roadmap: Putting It All Together"這篇文章里,我們熟悉了 "杜克的面包店"的擁有人和操作者Kate Cookie。Kate曾經(jīng)請(qǐng)程序員Madhavi Rao來(lái)為"杜克的面包店"設(shè)計(jì)了軟件架構(gòu)。在完成這項(xiàng)工作后,Madhavi去參與一個(gè)網(wǎng)上零售商的大規(guī)模java開(kāi)發(fā)項(xiàng)目,因?yàn)镵ate還需要一個(gè)原型系統(tǒng),Madhavi就把這個(gè)工作推薦給了我。
  
  經(jīng)過(guò)與Kate的幾次協(xié)商,她描述了她的經(jīng)營(yíng)情況和目標(biāo),我們決定采用這樣一種方法:我先拼裝出一個(gè)快速原型系統(tǒng),這樣她就可以開(kāi)始使用這個(gè)程序,以后再根據(jù)她的需求進(jìn)展提出一套更加具體的要求。
  
  Kate說(shuō)她最初想要關(guān)注的是在她生意興隆的店鋪里的一些特制產(chǎn)品。這些產(chǎn)品將通過(guò)特快專(zhuān)遞的方式郵寄給客戶(hù)。具體地說(shuō),她選擇了全麥烤面包、小胡蘿卜餅、奶奶面包和百吉餅。她想要這個(gè)程序能夠讓她輸入客戶(hù)的數(shù)據(jù),而且當(dāng)客戶(hù)的數(shù)據(jù)輸入以后,她要能夠通過(guò)輸入客戶(hù)的電話(huà)號(hào)碼再點(diǎn)一下Find按鈕就列出這個(gè)客戶(hù)的信息。她還告訴我說(shuō)她正在使用一臺(tái)裝有Microsoft access軟件的Windows PC。我提醒她說(shuō),使用什么平臺(tái)并沒(méi)有太大關(guān)系,因?yàn)镴ava技術(shù)的繼續(xù)性,而且由于使用JDBC API,我們將可以使用標(biāo)準(zhǔn)的SQL命令來(lái)處理數(shù)據(jù)。假如以后我們想要使用另外一個(gè)數(shù)據(jù)庫(kù)產(chǎn)品來(lái)代替Micosoft Access的話(huà),我們只需要對(duì)數(shù)據(jù)庫(kù)設(shè)置語(yǔ)句做很小的一點(diǎn)改動(dòng)就可以很輕易實(shí)現(xiàn)。Kate聽(tīng)了我的話(huà)很興奮,于是我就開(kāi)始著手工作了。
  
  定義數(shù)據(jù)庫(kù)環(huán)境
  第一步首先要定義數(shù)據(jù)庫(kù)環(huán)境。我決定使用一個(gè)叫做BakeryBook的數(shù)據(jù)庫(kù)里的兩張表,這兩張表分別是Addresses和Orders。這兩張表邏輯上通過(guò)一個(gè)ID字段相鏈接,這個(gè)ID字段在Addresses表中是主鍵,而在Orders表里就是名為L(zhǎng)inkAddrTbl的第二個(gè)字段。當(dāng)生成訂單的時(shí)候,來(lái)自Addresses表的ID字段就被包含到Orders表中,這樣訂單數(shù)據(jù)就可以與客戶(hù)數(shù)據(jù)相聯(lián)系了。這兩張表在Microsoft Access面板里描述如下。
  
  Addresses表的字段描述,其中ID是主鍵
  
  這張表里面除了ID字段是自動(dòng)編號(hào)的長(zhǎng)整數(shù)外,其他所有字段都是文本型的。自動(dòng)編號(hào)字段可以為每一個(gè)寫(xiě)入的記錄自動(dòng)生成一個(gè)唯一的數(shù)字。正因?yàn)檫@個(gè)原因,假如不再有其他方面考慮的話(huà),主鍵使用自動(dòng)編號(hào)字段是自然的選擇。圖中的小鑰匙圖標(biāo)表示ID字段是這個(gè)Addresses表的主鍵。
  
  當(dāng)Kate在電話(huà)訂購(gòu)中輸入客戶(hù)的數(shù)據(jù)時(shí),Addresses表將是她操作的對(duì)象,也將是她預(yù)期使用這個(gè)軟件的主要途徑。她計(jì)劃通過(guò)晚上的貨物空運(yùn)來(lái)配送她的新鮮面包。這個(gè)原型軟件使用一個(gè)電話(huà)號(hào)碼作為搜索要害詞來(lái)獲得已經(jīng)加入到數(shù)據(jù)庫(kù)里的客戶(hù)信息。一旦客戶(hù)的名字、地址和其他信息顯示到屏幕上,Kate將能夠通過(guò)點(diǎn)擊一個(gè)單選按鈕來(lái)產(chǎn)生一個(gè)彈出窗口,存儲(chǔ)一個(gè)訂單,然后為四種產(chǎn)品中的每一種(如全麥烤面包或百吉餅)輸入訂單編號(hào),這樣就生成了一張訂單。
  
  Orders 表的字段描述如下:
  
  訂購(gòu)信息被寫(xiě)入到這張Orders 表中,其中字段CustID是主鍵。LinkAddrTbl是一個(gè)長(zhǎng)整數(shù),用于指回到Addresses 表中的主記錄。字段wheat、 cake、 naan和 bagel也是長(zhǎng)整數(shù),用來(lái)存儲(chǔ)Addresses表里某個(gè)客戶(hù)的訂購(gòu)信息。
  
  JDBC-ODBC
  ODBC是Microsoft 定義的一個(gè)API。在Sun開(kāi)發(fā)Java JDBC API之前,ODBC是應(yīng)用最廣泛的用于訪問(wèn)關(guān)系數(shù)據(jù)庫(kù)的編程接口。但ODBC使用的是C語(yǔ)言接口,這就使其在安全性、實(shí)現(xiàn)、健壯性和可移值性方面都表現(xiàn)出很多缺點(diǎn)。由于廣泛使用了指針,要想精確地把ODBC的基于C的API轉(zhuǎn)換成Java API可能會(huì)很困難。但是ODBC可以在Java平臺(tái)下使用,在JDBC API的幫助下,以JDBC-ODBC橋的形式就可以很好地實(shí)現(xiàn)這一點(diǎn)。
  
  
  JDBC API是使用SQL的首選接口。它非常易于使用,因?yàn)槌绦騿T不必?fù)?dān)心內(nèi)存治理或字節(jié)調(diào)整這樣的問(wèn)題。JDBC建立于ODBC基礎(chǔ)之上,而不是從頭開(kāi)始的。JDBC-ODBC橋本身就是定義在 sun.jdbc.odbc.JdbcOdbcDriver中的一個(gè)JDBC驅(qū)動(dòng)。這個(gè)橋定義了作為JDBC子協(xié)議的odbc。在將來(lái),隨著大量純Java JDBC驅(qū)動(dòng)程序的開(kāi)發(fā),將使得這種JDBC-ODBC橋接方式變得多余了,但是在本文中我們需要用它來(lái)連接Microsoft Access。
  
  Microsoft 推出了超越ODBC的一些新API,例如OLE(Object Linking and Embedding)DB,ADO(Active X Data Objects)和RDS(Remote Data Service)。OLE DB和ADO也是面向?qū)ο蟮目梢詧?zhí)行SQL命令的數(shù)據(jù)庫(kù)接口。然而OLE DB 是一種為工具而不是為開(kāi)發(fā)人員設(shè)計(jì)的低層接口。ADO要更新些,更類(lèi)似JDBC API一些,但是它不是純的Java。RDS提供了類(lèi)似于JDBC API的RowSet工具的功能,但是RDS并不是用Java編程語(yǔ)言寫(xiě)的,而且不可移植。
  
  兩層模型和三層模型
  在兩層模型里,Java applet或應(yīng)用程序?qū)⒅苯优c數(shù)據(jù)源對(duì)話(huà)。這就要求有一個(gè)可以與數(shù)據(jù)源進(jìn)行對(duì)話(huà)的JDBC驅(qū)動(dòng)程序,比如Access數(shù)據(jù)庫(kù),。用戶(hù)的SQL命令被送往數(shù)據(jù)庫(kù)或其他數(shù)據(jù)源,然后這些語(yǔ)句的執(zhí)行結(jié)果又被傳回給用戶(hù)。
  
  數(shù)據(jù)源可以位于另一臺(tái)計(jì)算機(jī)上,用戶(hù)通過(guò)網(wǎng)絡(luò)連接到上面。這就叫做客戶(hù)機(jī)/服務(wù)器配置,其中用戶(hù)的計(jì)算機(jī)為客戶(hù)機(jī),提供數(shù)據(jù)庫(kù)的計(jì)算機(jī)為服務(wù)器。網(wǎng)絡(luò)可以是 intranet,也可以是 Internet。
  
  在三層模型中,命令先是被發(fā)送到服務(wù)的"中間層",然后由它將命令發(fā)送給數(shù)據(jù)源。數(shù)據(jù)庫(kù)對(duì) SQL 語(yǔ)句進(jìn)行處理并將結(jié)果送回到中間層,中間層再將結(jié)果送回給用戶(hù)。這種三層模型提供了對(duì)于各種更新的更大控制,而且它還簡(jiǎn)化了應(yīng)用程序的部署。在許多情況下,這種三層模型還可以提供性能上的優(yōu)勢(shì)。然而對(duì)于我們"杜克的面包店",兩層模型就可以工作得很好了。
  
  在Windows 98 下配置Micosoft Access
  
  Kate Cookie正在使用一臺(tái)運(yùn)行Windows 98的機(jī)器,而這臺(tái)機(jī)器上還安裝了Micosoft Access。所以我們需要按照以下幾步通過(guò)JDBC-ODBC橋來(lái)進(jìn)行通信,并且連接到名為BakeryBook的數(shù)據(jù)庫(kù)。
  
  在Windows的控制面板里,雙擊ODBC數(shù)據(jù)源。就會(huì)出現(xiàn)下面的窗口。
  
  "杜克的面包店"數(shù)據(jù)庫(kù)名為BakeryBook.mdb。選擇這個(gè)條目,然后點(diǎn)擊"Add"按鈕。這時(shí)將會(huì)出現(xiàn)另一個(gè)標(biāo)題為"Create New Data Source"的窗口。選擇"Microsoft Access Driver"條目,然后點(diǎn)擊"Finish"按鈕。
  
  這時(shí)將會(huì)出現(xiàn)下面這樣的窗口。"杜克的面包店"數(shù)據(jù)庫(kù)的名字是BakeryBook。為了找到這個(gè)數(shù)據(jù)庫(kù)所在的目錄路徑,點(diǎn)擊"Select"按鈕,它會(huì)讓您查找一個(gè)目錄。當(dāng)輸入了數(shù)據(jù)庫(kù)的名字、路徑和描述文字以后,點(diǎn)擊"Advanced"按鈕。
  
  接下來(lái)就會(huì)出現(xiàn)下面這個(gè)窗口。
  
  出于演示的目的,我們輸入默認(rèn)的登錄名"anonymous",密碼為"guest"。點(diǎn)擊"ok"關(guān)閉這個(gè)對(duì)話(huà)框,并在剩下的所有ODBC窗口中點(diǎn)擊"OK"按鈕。這就結(jié)束了配置過(guò)程。
  
  現(xiàn)在我們要預(yù)備開(kāi)始看一些代碼了!
  
  代碼預(yù)排
  我使用JFC(Java Foundation Classes)開(kāi)發(fā)了一個(gè)原型GUI。它們由以下幾方面組成:Abstract Window Toolkit (AWT), Accessibility API, 2D API, 對(duì)拖放功能的增強(qiáng)支持, 和Swing組件。
  
  Swing組件經(jīng)常被認(rèn)為是輕量級(jí)的組件。因?yàn)樗鼈兪峭耆肑ava語(yǔ)言寫(xiě)的,所以總的來(lái)說(shuō),它們并不因?yàn)橹髌脚_(tái)強(qiáng)加于GUI的復(fù)雜性而顯得粗笨。 因?yàn)橄旅孢@兩個(gè)原因,我們通常不需要重量級(jí)的組件。
  
  不同平臺(tái)上的同等組件不必以同樣的方式來(lái)實(shí)現(xiàn)其功能。
  每個(gè)組件的外觀(look-and-feel)是與主機(jī)操作系統(tǒng)密切相關(guān)的。
  下面回顧一下將Swing組件和老的AWT組件區(qū)別開(kāi)來(lái)的一些重要特征。
  
  Swing提供了大量的新組件,例如表、樹(shù)、滑塊、進(jìn)度條、內(nèi)建框架和文本組件。
  Swing組件能夠在它們上面放置工具條提示。工具條提示就是當(dāng)鼠標(biāo)移動(dòng)到組件所在區(qū)域時(shí)所彈出來(lái)的說(shuō)明性文字。工具條提示可以為我們提供關(guān)于該組件的一些額外信息。
  鍵盤(pán)事件可以綁定到組件,并定義它們將如何對(duì)各種各樣的鍵擊做出響應(yīng)。
  還有一些用來(lái)呈現(xiàn)您自已的輕量級(jí)Swing組件的調(diào)試支持。
  Swing的出現(xiàn)伴隨著一種默認(rèn)的叫做"Metal"的look-and-feel(L&Fs),它包含了現(xiàn)在主流L&Fs的一些最好的圖形元素。Java編程語(yǔ)言使得它很輕易實(shí)現(xiàn)一些其他的L&Fs,比如類(lèi)似于Windows 或Motif外觀,但是對(duì)于這個(gè)應(yīng)用程序來(lái)說(shuō)Metal將是最合適的。
  
  下面的代碼片段來(lái)自于叫做DukeBakery的主類(lèi)。這里您可以看到基本GUI組件的創(chuàng)建過(guò)程。 public class DukeBakery extends JFrame {
  PRivate DataPanel screenvar;
  private JTextArea msgout;
  private Connection dbconn;
  
  public DukeBakery() {
  super( "DUKE'S BAKERY" );
  // Set up GUI environment
  Container p = getContentPane();
  screenvar = new DataPanel();
  msgout = new JTextArea( 8, 40 );
  p.setLayout( new FlowLayout() );
  p.add( new JScrollPane(
  screenvar ) );
  p.add( new JScrollPane(msgout) );
  
  語(yǔ)句super( "DUKE'S BAKERY" );的執(zhí)行調(diào)用了super類(lèi)Jframe的構(gòu)造函數(shù),并將字符串"DUKE'S BAKERY"放置到窗口的標(biāo)題欄上。然后我們就得到了一個(gè)容器對(duì)象p,它創(chuàng)建一個(gè)用來(lái)連接組件以供顯示的內(nèi)容窗格(content pane)。接下來(lái)一個(gè)DataPanel對(duì)象被實(shí)例化。這是我自已定義的一個(gè)類(lèi),我們將在下一節(jié)中具體分析它的代碼。同時(shí),一個(gè)有8字符行和40字符列的JtextArea被實(shí)例化。語(yǔ)句p.setLayout( new FlowL

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新蔡县| 娄底市| 淮安市| 游戏| 黑山县| 应城市| 枣强县| 西乡县| 永善县| 芮城县| 芦溪县| 慈利县| 昆明市| 江口县| 崇文区| 临夏市| 永宁县| 彭水| 观塘区| 宁明县| 杭锦后旗| 织金县| 本溪| 建宁县| 景洪市| 永安市| 新余市| 平度市| 凉城县| 宝丰县| 周至县| 晋州市| 措美县| 察哈| 特克斯县| 滦南县| 洪洞县| 古丈县| 惠东县| 平顶山市| 彩票|