本教程介紹瞭如何創建一個能夠對數據庫進行訪問和更新的桌面 Java 應用程序。該教程利用了NetBeans IDE 6.0 對以下技術的支持:
l Java 持久性 API,它幫助使用 Java 代碼與數據庫進行交互操作。
l Beans 綁定 (JSR-295) ,它爲不同的 JavaBeans 組件提供一種擁有相互同步屬性值的方法。例如,可以使用 beans 綁定將 Jtable 可視化組件中的單元值與實體類中的字段值同步。(而實體類則代表數據庫表的列。)
l Swing 應用程序框架 (JSR-296) ,它爲快速創建桌面應用程序提供一些有用的構建程序塊。
我們將使用在可視化數據中使用的一個自定義組件來創建一個數據庫 CRUD (創建、讀、更新、刪除)應用程序。
本次編寫的教程配合 NetBeans IDE 6.0 Preview (Milestone 9) build 使用。本教程不適於較早的 milestone build (重要構件版本)。此外,在後續構件版本中會存在一些變更,這些變更會影響本教程的準確性。
本教程在很大程度上是以視頻演示爲基礎的,該視頻演示基於較早的開發構件版本。在演示製作完成以後,用戶界面已經發生了一些改變,所以,可能會發現本教程和演示之間會存在一些差異。
預計持續時間:45 分鐘
前提條件
本文假定您基本瞭解以下技術,或者有使用這些技術編程的經驗:
l Java 編程
l NetBeans IDE
教程所需的軟件
本教程需要在計算機上安裝以下軟件:
l NetBeans IDE 6.0 Preview (Milestone 9) (下載)。
l Java Standard Development Kit (JDK) 5.0 或者 6.0 版(下載)
l Java DB 數據庫服務器(Java DB 包含在 JDK 6 中)
l SQL 腳本,位於 http://usersguide.netbeans.org/files/documents/40/1423/car.sql。
l CarPreview 項目,位於http://usersguide.netbeans.org/files/documents/40/1433/CarPreview.zip
建立數據庫
開始在 IDE 中創建桌面 CRUD(創建、讀、更新、刪除)應用程序之前,應該將 IDE 與應用程序將要使用的數據庫相連。提前建立這種連接,可以利用 IDE 自動將數據庫與應用程序綁定的功能。
在本教程中,我們提供使用 Java DB 數據庫的指令,因爲有一個便捷界面可以從 IDE 中啓動和停止 DB 數據庫服務器。也可以使用一個不同的服務器,但困難很大。
首先,檢查是否在 IDE 中對 Java DB 進行了註冊。許多情況下,Java DB 在 IDE 中被自動註冊,比如:已經在 IDE 中註冊了 Sun Java 系統應用程序服務器,或者正在運行 JDK 6 時。
確定是否在 IDE 中註冊了 Java DB 的步驟:
l 打開 Tools 菜單,查找 Java DB Database 菜單項。
如果沒有 Java DB 菜單項,需要在 IDE 中手工註冊 Java DB。
在 IDE 中手工註冊 Java DB 的步驟:
- 在系統上創建一個文件夾來保存數據庫。
- 選擇 Tools > Options。
- 在 Options 窗口中,單擊 Advanced Options 按鈕。
- 在 Advanced Options 窗口中,展開 IDE Configuration > Server and External Tools Settings 節點。然後選擇 Java DB Database 節點。
- 在 Advanced Options 窗口的右側,單擊省略符號 (
) 按鈕獲取 Java DB Location,併爲數據庫服務器設置路徑(例如:C:/javadb/db )。 - 在 Database Location 屬性中,鍵入在該步驟 1 中所創建文件夾的路徑。
- 單擊 Close。
啓動服務器並創建數據庫
向 IDE 註冊了 Java BV 後,在主菜單中的 Tools 下會出現 Java DB Database 菜單項。該菜單項能夠方便地實現數據庫服務器的啓動和停止,同時方便地創建一個新的數據庫。
啓動數據庫服務器的步驟:
l 選擇 Tools > Java DB Database > Start Java DB Server。
如果爲數據庫設定位置,則會出現 Set Database Location 對話框。爲數據庫服務器輸入一個位置,保存數據庫。也可以在此創建一個新的文件夾。
啓動服務器後,在 Output 窗口中將打開 Java DB Database 處理選項卡,並顯示類似如下的消息:
Apache Derby Network Server - 10.2.1 .7 - (453926) started and
ready to accept connections on port 1527 at 2007-04-27 11:32:45.406 GMT
創建數據庫:
- 選擇 Tools > Java DB Database > Create Java DB Database。打開 Create Java DB Database 對話框。
- 在 Database Name 文本字段中鍵入 car_database。並且將 User Name 和 Password 都設置爲 nbuser。
- 單擊 OK。
連接數據庫
至此,我們成功地啓動了數據庫服務器,並且創建了一個數據庫。但是,我們還需要連接新數據庫,才能開始使用它在 IDE 中工作。連接 car_database 數據庫的步驟:
- 切換到 Runtime 窗口 (Ctrl + 5),展開 Databases 節點,查看新數據庫。
- 右鍵單擊數據庫連接節點(jdbc:derby://localhost:1527/car_database[nbuser on NBUSER]) ,並選擇 Connect。
現在連接節點圖標應該出現 (
- 右鍵單擊連接節點的 Tables 子節點,並選擇 Execute Command。
- 複製 car.sql 文件的內容,並將它們粘貼到 Source Editor 的 SQL Command 1 選項卡中。
這是 SQL 腳本,該腳本將把有關汽車的數據移往數據庫。
- 單擊 Source Editor 工具欄中的 Run SQL 按鈕 (
創建應用程序
- 選擇 Project > New Project。
- 在嚮導的第一個面板中,展開 General 種類,並選擇 Java Desktop Application 模板。單擊 Next。
Java Desktop Application 模板提供許多可視化應用程序的基本元素,包括:基本菜單項目和命令。
- 在嚮導的 Name and Location 頁面中,執行以下操作:
- 在 Project Name 字段中,鍵入 CarsApp。該字段的值設定 Projects 窗口中項目計劃的顯示名稱。
- 可選擇編輯 Project Location 字段,以改變項目元數據的位置。
- 在 Choose Application shell 字段中,選擇 Database Application。
- 單擊 Finish。
- 在嚮導的 Master Table 頁面中,爲 CAR 數據庫選擇數據庫連接。數據庫的清單看上去應該如下所示:
jdbc:derby://localhost:1527/cars[nbuser on NBUSER] - 爲數據庫填寫密碼 (nbuser) ,並選擇 Remember Password During This Session 複選框。
在建立了與數據庫的連接之後,Database Table 字段應該顯示 CAR,並且 Columns to 列表應該包含 CAR 數據庫 10 列的名稱。現在,我們將在應用程序中僅使用其中的五個。
- 選擇下面五個列名稱(從 SUN_ROOF 開始,到 MODERNNESS 結束),並單擊 < 按鈕。單擊 Next。
- 在 Detail Options 面板上,單擊 Finish。
然後,嚮導生成一個基本用戶界面,其中一個表與一個數據庫相連接。
運行生成的應用程序
這時便擁有了一個帶圖形用戶界面(GUI)的基本運行應用程序,該圖形用戶界面具有以下特性:
l 查看和修改 CAR 數據庫五個列中數值的能力
l 基本菜單項目。
l 其會話期間窗口狀態的維持。當關閉應用程序時,記住窗口位置和大小。所以當重新打開應用程序時,窗口將在其關閉的位置打開。
l 一個 About 對話框,可以方便地對其進行自定義。
l 包含在用戶界面中標籤的 .properties 文件。使用 .properties 文件是維持從文本中分離代碼的邏輯的好辦法,該文本出現在應用程序的用戶界面中。這種分離可以使程序本地化變得更加方便。
遵照以下這些步驟,查看已經構建於應用程序中的一些功能:
- 右鍵單擊項目節點,然後選擇 Run Project。
幾秒鐘後,應用程序啓動,出現一個名爲 Database Application Example 的窗口。該窗口包含一個表格和幾個能夠編輯 CARS 數據庫的控件。
- 選擇表格中的第一個記錄(對於 Acura)。
- 選擇 Price 文本字段,並使用 46999 替換現有數值,然後按 Enter。
表格中的數值應該被更新。
同樣,可以更新表格中的其他任何數值。
- 單擊 New,創建一個新的記錄。然後在各個字段中 (Make、Model、Price、Body Style、Color) 填寫數值。例如,可以填寫: Traband、Classic、1000、wagon、blue。單擊 Save 將輸入保存在數據庫中。
- 單擊 Database Application Example 標題欄,然後將應用程序拖至屏幕上的不同位置。
- 單擊 Database Application Example 窗口的左邊框,然後拖向左側,以增加窗口的尺寸。
- 在 Database Application Example 菜單欄中,選擇 File Exit。
- 在 IDE 中,右鍵單擊項目節點,然後選擇 Run Project。
Database Application Example 窗口將在上次應用程序關閉時的位置以相同的大小打開。
覈查生成的應用程序的部件
可視化 Jtable 組件和數據庫之間的連接使用以下機制的組合進行管理,所有這些機制都是由 IDE 生成的:
l Car.java 實體類,該實體類用於對 CAR 數據庫表格的數據進行讀和寫操作。實體類是一種特殊類型的類,它們使您能夠通過 java 代碼與數據庫進行交互。實體類使用 java 註釋,將類字段映射到數據庫列。 .
l META-INF/persistence.xml 文件,該文件定義了數據庫和實體類之間的連接。該文件也叫做持久單元。
l 使用 beans binding,將實體類的屬性與 JTable 組件的屬性連接。Beans binding 是一種基於 JSR 295 的新技術,該技術將可能被包含在將來 java SE 的發佈中。
l entityManager、query 以及 list 對象,這些對象在 CarsAppFrame 類中定義,並在 Other Components 節點下的 Inspector 窗口中列出。
m 實體管理器對象用於在定義的持久單位範圍內找回和提交數據。
m 查詢對象定義如何從實體管理器中找回特定的數據集合。可以通過在 Inspectory 窗口中選擇查詢對象,並在屬性表中更改 query 屬性的方式,改變查詢對象的工作方式。query 屬性使用 JPA 查詢語言。
m 列表對象是一種可觀察集合,該集合持有來自查詢的數據。可觀察集合是集合的特殊種類,在其上可設置一個監聽器,以發現對集合做出更改的時間。
使用 Inspector 窗口和屬性表,可以按照以下步驟瞭解 Jtable 是如何與數據綁定的:
- 在 Inspector 窗口中,選擇 [JFrame] > innerPane [JPanel] > masterScrollPane [JScrollPane] > masterTable (JTable) 節點。然後單擊 Properties 窗口中的 Binding 選項卡。
- 觀察元素屬性,確認它已與列表綁定。
- 單擊省略號 [...] 按鈕,打開 Bind masterTable 元素定製器,在此可以進一步定製表和數據庫之間的綁定。例如,可以看到,定製器能夠實現對指定表列的綁定。
除了屬性表中的 Binding 種類外,還可以使用上下文菜單中的 Bind 菜單。
添加更多控件
針對一些我們起初排除的屬性,我們現在向表單添加控件。我們不使用表格,我們將添加 Jslider 組件(用於 tire size 和 modernness 屬性)和 JCheckbox 組件(用於 sun roof 和 spoiler 屬性)。
按照以下步驟添加額外的組件:
- 單擊 Palette 窗口中的 JSlider 按鈕,添加第一個滑動條,然後單擊位於 New 按鈕上方的表單。在單擊表單插入滑動條之前,應確保未出現水平槽形引導線。這些線條表示滑動條將被插在與字段或者按鈕相同的行上。參照下圖,瞭解應該將滑動條放在表單的什麼位置。
注意:如果將組件放到了不希望放置的位置,並由此造成了佈局上的改變,最簡單的恢復辦法是不保存更改關閉表單。然後重新打開表單,再試一次。
- 如有必要,向左展開滑動條,將它與文本字段組件的左側對齊。
- 向右展開滑動條,跨過整個表單的寬度。
- 在滑動條的左側添加一個標籤,並將它的文本設爲 Tire Size。(單擊標籤,使其處於可編輯狀態。)
- 在第一個滑動條的下方添加另一個滑動條,必要時調整它的寬度並對齊。
- 在 Tire Size 標籤下添加另一個標籤,並將它的文本設爲 Modernness。
- 在滑動條的下方添加兩個複選框。將它們的文本設爲 Spoiler 和 Sun Roof。
將控件與表格中的值綁定
我們現在將使用 beans binding 特性,將表格單元中顯示的值與已添加控件的狀態聯繫起來。這樣可以實現使用滑動條和複選框改變表格中的單元值。
將滑動條和複選框與其相應的表格元素綁定的步驟:
- 在表單中,右鍵單擊第一個滑動條,並選擇 Bind > value。
- 在 Binding 對話框的 Binding Source 下拉列表中,選擇 masterTable。
- 在 Binding Expression 下拉列表中,選擇 Element > tiresize。
- 在表單中,右鍵單擊第二個滑動條,並選擇 Bind > value。
- 在 Binding 對話框的 Binding Source 下拉列表中,選擇 masterTable。
- 在 Binding Expression 下拉列表中,選擇 selectedElement > tiresize。
- 在表單中,右鍵單擊第一個複選框,並選擇 Bind > selected。
- 在 Binding 對話框的 Binding Source 下拉列表中,選擇 masterTable。
- 在 Binding Expression 下拉列表中,選擇 selectedElement > spoiler。
- 在表單中,右鍵單擊第二個複選框,並選擇 Bind > selected。
- 在 Binding 對話框的 Binding Source 下拉列表中,選擇 masterTable。
- 在 Binding Expression 下拉列表中,選擇 selectedRow > sunRoof。
- 選擇 Run > Run Main Project 執行應用程序。可以使用運行的應用程序中的滑動條和複選框更改所選記錄的值。
建立一個自定義組件
爲了以更加圖形化的方式演示運行中的 bean 綁定,我們將添加一個可以預覽所選車型噴塗效果的自定義組件。我們將把該組件的屬性與相應的表格元素進行綁定。再次運行應用程序的時候,車型預覽將隨所選行的變化和各種字段值的變化而改變。
使 CarPreview 組件能夠應用於 CarsApp 項目的步驟:
- 如果您尚未這樣做,請下載CarPreview.zip 文件。
- 使用標準 zip 工具,解壓 zip 文件。
- 選擇 Project > Open Project,然後找到 zip 解壓後的文件,並選擇 CarPreview 項目。
- 單擊 Open Project Folder。
該項目在 IDE 中打開。
- 右鍵單擊 CarPreview 節點並選擇 Build Project。
這樣便對項目中的文件進行了彙編,以便將 CarPreview 類作爲一個 bean 來使用,能夠在表單上直接進行拖放操作。
該組件被寫成 JavaBeans 組件,所以,可以將其添加至 Palette,這樣可以方便地向多個應用程序添加組件。但是現在,我們只是簡單地將組件直接從 Projects 窗口拖進應用程序。
嚮應用程序添加 CarPreview 組件的步驟:
- 在 Projects 窗口中,展開 Car Preview > Source Packages > carpreview > nodes。
- 將 CarPreview.java 類拖向表單。要將其插入到菜單的下方,請將其放置在表上,與其它控件的左側對齊,並且與工具欄的底部對齊,如下圖所示。
- 在整個表單上,沿水平方向重新設定預覽組件。
- 採用將滑動條和複選框與 JTable 中元素進行綁定的相同方式,將 CarPreview 組件的所有綁定屬性與 masterTable 相應的 selectedElement 屬性進行綁定。使用 Bind 彈出菜單,或者屬性表中的 Binding 選項卡。
- 重新運行 CarApp 應用程序。
在運行中的應用程序中可以發現,在選擇表格中不同的行、修改表格中的值、移動滑動條以及選擇和不選複選框時,CarPreview 組件會隨之發生變化。
查看原文:http://www.netbeans.org/kb/60/ide-gui-db-prev.html