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

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

一個JDBC訂購系統原型

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日产欧美a一级在线| 欧美成人免费大片| 国产精品户外野外| 日韩国产欧美精品在线| 亚洲va男人天堂| 日韩av观看网址| 欧美日韩午夜视频在线观看| 国产精品午夜视频| 日韩高清免费观看| 日韩欧美一区二区在线| 不卡av日日日| 少妇高潮 亚洲精品| 九九热在线精品视频| 97成人超碰免| 亚洲最大av在线| 亚洲男人天堂九九视频| 中文字幕国产亚洲| 亚洲欧美日韩中文在线制服| 97国产精品人人爽人人做| 国产女人精品视频| 亚洲理论在线a中文字幕| 欧美激情在线视频二区| 亚洲人成网站免费播放| 亚洲色在线视频| 欧美猛少妇色xxxxx| 欧美精品999| 国产精品第一页在线| 伊人久久男人天堂| 午夜精品福利视频| 日韩av手机在线| 久久久久久中文| 中文字幕日韩电影| 成人免费大片黄在线播放| 不卡在线观看电视剧完整版| 欧美高跟鞋交xxxxxhd| 精品女同一区二区三区在线播放| 精品久久久久久久久久久久久久| 热久久美女精品天天吊色| 一本色道久久88精品综合| 亚洲国产成人一区| 色婷婷综合成人av| 综合网日日天干夜夜久久| 亚洲午夜未删减在线观看| 国产成人精品日本亚洲专区61| 最新国产成人av网站网址麻豆| 亚洲а∨天堂久久精品喷水| 亚洲欧洲在线观看| 中文字幕亚洲欧美日韩在线不卡| 久久影视电视剧免费网站清宫辞电视| 久久视频在线播放| 69久久夜色精品国产69| 日韩国产精品视频| 69**夜色精品国产69乱| 久久天天躁狠狠躁夜夜躁| 欧美亚洲国产精品| 91精品国产综合久久香蕉的用户体验| 欧美尤物巨大精品爽| 在线播放日韩精品| 久久伊人精品视频| 亚洲区中文字幕| 欧美理论电影在线观看| 国产精品av在线| 久久夜精品香蕉| 欧美极品在线视频| 久久av红桃一区二区小说| 91久久久久久久久久久| 久久资源免费视频| 成人激情在线观看| 久久精品青青大伊人av| 国产欧美精品日韩| 国产日韩av高清| 欧美精品成人91久久久久久久| 精品国产91久久久久久老师| 日韩福利伦理影院免费| 综合久久五月天| 日韩中文字幕免费| 亚洲一级片在线看| 亚洲成年网站在线观看| 狠狠久久亚洲欧美专区| 久久中文字幕在线视频| 日韩在线视频免费观看高清中文| 亚洲人成在线免费观看| 日韩电影在线观看中文字幕| 久久久午夜视频| 日韩免费精品视频| 茄子视频成人在线| 亚洲精品aⅴ中文字幕乱码| 国产欧美在线看| 欧美大片第1页| 亚洲乱码国产乱码精品精| 欧美国产亚洲精品久久久8v| 97视频在线观看亚洲| 久久婷婷国产麻豆91天堂| 亚洲综合第一页| 亚洲第一精品夜夜躁人人爽| 日产精品99久久久久久| 成人在线精品视频| 狠狠色狠狠色综合日日小说| 亚洲一区免费网站| 国产欧美日韩综合精品| 日韩中文字幕在线播放| 96国产粉嫩美女| 亚洲第一黄色网| 日韩av最新在线| 欧美精品18videos性欧美| 日韩欧美在线看| 久久久999精品| 久久久精品国产| 国产精品99免视看9| wwwwwwww亚洲| 青青久久av北条麻妃海外网| 日韩av第一页| 久久综合电影一区| 欧美诱惑福利视频| 97超级碰碰碰久久久| 国内精品久久久久久中文字幕| 国产一区欧美二区三区| 久久久久亚洲精品国产| 欧美久久精品一级黑人c片| 最近2019年日本中文免费字幕| 日韩电视剧在线观看免费网站| 91香蕉嫩草神马影院在线观看| 日韩成人av网址| 国产伦精品免费视频| 久青草国产97香蕉在线视频| 欧美日韩成人在线观看| 日韩av电影在线网| 日韩高清免费观看| 国产美女精品视频| 亚洲国产欧美一区| 亚洲福利视频久久| 91精品国产色综合久久不卡98口| 亚洲成人免费在线视频| 成人日韩av在线| 日韩一区二区三区xxxx| 欧美黄色www| 欧美精品一区二区三区国产精品| 亚洲精品少妇网址| 九九热精品视频国产| 国产亚洲精品美女久久久久| 国产精品综合久久久| 欧美日韩在线第一页| 欧美人与性动交a欧美精品| 久久人人爽人人爽人人片亚洲| 国产在线观看一区二区三区| 国产精品亚洲欧美导航| 成人黄在线观看| 亚洲激情免费观看| 日韩久久精品电影| 国产精品久久久久久久久免费| 在线播放国产精品| 欧美一级视频一区二区| 欧美一区第一页| 亚洲自拍偷拍网址| 国产主播喷水一区二区| 亚洲欧美制服综合另类| 久久69精品久久久久久国产越南| 狠狠躁夜夜躁久久躁别揉| 成人免费激情视频| 2019中文字幕全在线观看| 国产97人人超碰caoprom| 亚洲欧美国产制服动漫| 一本一本久久a久久精品综合小说| 国产精品高潮呻吟久久av野狼|