這次有個任務,需要用java的圖形用戶界面來實現一個后臺管理系統。我大概在網上隨便找了一個類似于這個后臺管理的框架(真的只是框架,一個登陸的窗口,一個用戶管理的非常簡單的頁面),然后內部的事務邏輯均屬原創。
下面,就來簡單介紹一下這個后臺管理系統是如何實現的,以及我制作時候的內部邏輯是如何的。
首先,為我們的數據庫連接建立一個JDBC工具類
這個工具類比較簡單,其作用就是可以使得直接通過這個工具類,可以直接獲得數據庫鏈接,這樣在后面不同的類去獲取連接時,不需要寫重復代碼,只需要通過工具類就可以直接獲得。
代碼如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;public class JDBCUtils {private JDBCUtils(){}private static Connection con ;static{ try{Class.forName("com.mysql.jdbc.Driver"); //注冊驅動,之所以用反射,這里不多解釋String url = "jdbc:mysql://localhost:3306/數據庫名";String username="數據庫管理員名";String password="數據庫管理員密碼";con = DriverManager.getConnection(url, username, password); //獲取數據庫連接}catch(Exception ex){throw new RuntimeException(ex+"數據庫連接失敗");}}/** 定義靜態方法,返回數據庫的連接對象*/public static Connection getConnection(){return con;}/*
這個方法是用來釋放資源的,原則是先得到的后關閉
因為對數據庫的操作不同,所以可能會產生兩種關閉的情況,所以為了以防萬一需要寫兩種關閉的方法,后來在具體項目的實踐中我發現,查詢這種情況是實時存在的,所以只需要寫一種方法就可以了
*/public static void close(Connection con,Statement stat){if(stat!=null){try{stat.close();}catch(SQLException ex){}}if(con!=null){try{con.close();}catch(SQLException ex){}}}public static void close(Connection con,Statement stat , ResultSet rs){if(rs!=null){try{rs.close();}catch(SQLException ex){}}if(stat!=null){try{stat.close();}catch(SQLException ex){}}if(con!=null){try{con.close();}catch(SQLException ex){}}}
}
然后,我們就需要思考如何在后臺管理系統中進行操作
這個過程才是真正的核心,你需要明確你的后臺管理系統中包括哪些功能,在此我先將我的后臺管理系統的截圖發上來,咱們在好好說道這個思考的過程。
首先需要想想這個后臺管理系統該是什么樣子的,也就是所謂的設計一個簡單的UI,然后我們看著眼前的UI在來一步步去思考該如何實現。
1)第一步,我們需要實現好查詢功能,也就是上面的“公司部門”、“公司員工”等幾個按鈕,每一個按鈕內部都包含了一個查詢操作,查詢的是對應的我的那個數據庫的表。這里的第一行,我寫的是固定的,每一個選項,對應的是不同的數值,這個數值決定了我采用那個一維字符串數組作為頭部。然后就是重頭戲了,我們需要決定好下面的表的內容,也就是將數據庫中的表的內容呈現到這個表中。結合java Swing中表的特征,我選擇了二維數組賦值的方法,為此,我在針對數據庫操作的方法中,需要得到一個二維數組。
因為查詢的時候,我無法獲得resultset的長度,所以我采用了一個笨方法,賦值兩個resultset,一個用來獲取行數,一個用來給二維數組的每一個具體列賦值。其方法實現如下:
public static String[][] resultSet(int k) { //這是一個方法,可以返回一個二維數組PreparedStatement pst = null; //聲明一個預處理對象ResultSet rs = null; //第一個resultsetResultSet rs1 = null;if (k == 1) { //這個針對的是第一個按鈕,也就是上面的"公司部門"int count = 1; //用來記錄二維數組的行數,從而實現動態賦值int colum = 0; //這個是來記錄多少行的,但是單詞好像寫錯了,多多擔待String sql = "select * from departments"; //查詢"公司部門"對應的數據庫表try {pst = con.prepareStatement(sql); //對sql語句進行預編譯rs = pst.executeQuery(); //執行查詢語句,并得到Resultset結果集while (rs.next()) {colum++;}items = new String[colum][4]; //獲取一個行數可變的二維數組rs1 = pst.executeQuery();while (rs1.next()) {items[count - 1][0] = rs1.getString("department_id");items[count - 1][1] = rs1.getString("department_name");items[count - 1][2] = rs1.getString("manager_id");items[count - 1][3] = rs1.getString("location_id");count++;}} catch (SQLException e) {e.printStackTrace();}}
這是針對第一個按鈕所寫的查詢代碼,后面的三個按鈕相同,只需要該部分內容就行。
2)現在我們來實現添加功能,這個添加功能就是簡單的獲取四個對話框里的文本內容,然后對應查看數據庫中對應的數據類型,將類型轉換正確后,在進行插入操作,然后按下添加按鈕后,更新圖形用戶界面就可以了。
public static int insert(int k, String str1, String str2, String str3, String str4) { //我設置返回值為int是為了調用這個方法時,能夠判斷出是否執行成功int line = 0;PreparedStatement stat = null;if (k == 1) {String sql = "insert into departments(department_id,department_name,manager_id,location_id) values(?,?,?,?)"; //利用占位符,try {stat = con.prepareStatement(sql);int did = Integer.parseInt(str1); //經過數據庫中表的列的類型查詢得知,這三個列的類型是int類型,因此需要在替換占位符前,先替換數據類型int mid = Integer.parseInt(str3);int lid = Integer.parseInt(str4);stat.setInt(1, did); //替換占位符stat.setString(2, str2);stat.setInt(3, mid);stat.setInt(4, lid);// 5執行SQL語句line = stat.executeUpdate(); //執行sql語句,如果執行成功,會返回影響的行數(代表插入了幾行),肯定會是1,這是你就可以判斷自己的數據插入成功了} catch (SQLException e) {throw new RuntimeException(e);}}
3)下面,我們再來執行修改操作,這個操作會涉及到一定的Swing中的方法,就是獲取你所點擊的行的數據,并賦值給下面的幾個text框中,當然,你也可以根據第一列的id號直接修改,因為你的sql操作可以做到運行這樣修改。
在此,我先將那個獲取點擊行的內容的代碼po出來:
table.addMouseListener(new MouseAdapter() { //鼠標事件public void mouseClicked(MouseEvent e) {int selectedRow = table.getSelectedRow(); //獲得選中行索引Object oa = tableModel.getValueAt(selectedRow, 0);Object ob = tableModel.getValueAt(selectedRow, 1);Object oc = tableModel.getValueAt(selectedRow, 2);Object od = tableModel.getValueAt(selectedRow, 3);try {aTextField.setText(oa.toString()); //給文本框賦值bTextField.setText(ob.toString());cTextField.setText(oc.toString());}catch (NullPointerException ex){cTextField.setText("");throw new RuntimeException(ex+"遇到了空字符串");}finally {dTextField.setText(od.toString());}}});
大家或許會對我這幾行代碼中的try、catch、finally這個用法不太理解,其實他們不具有通用性,它是針對我第一個截圖中的有幾行第三列數據為空的情況而存在的。
這段獲取值的方法寫完后,可以直接在文本框內修改其值,但是注意id號千萬不能修改,它是我們SQL語句中執行修改的關鍵,sql相關操作的代碼如下:
public static int update(int k, String str1, String str2, String str3, String str4) {int line = 0;PreparedStatement stat = null;if (k == 1) {String sql = "update departments set department_name=?,manager_id=?,location_id=? where department_id=?";try {stat = con.prepareStatement(sql);int did = Integer.parseInt(str1);int mid = Integer.parseInt(str3);int lid = Integer.parseInt(str4);stat.setString(1, str2);stat.setInt(2, mid);stat.setInt(3, lid);stat.setInt(4, did);// 5執行SQL語句line = stat.executeUpdate();} catch (SQLException e) {throw new RuntimeException(e);}}
這里的代碼就不做過多解釋了,基本和上面的重復,注意占位符的位置就行。
4)好,現在我們來執行最后一個事務,那就是刪除,我認為這個是最簡單最輕松的了,直接獲取第一個id號,然后執行sql語句進行刪除就可以了,代碼和上面的幾乎都差不多,只會更簡單,在此不再過多贅述了。
5)最后的最后,我在簡單放一下我的信息統計的頁面,他這個其實也要查詢,但是需要單獨寫一段查詢代碼,但是本質還是一樣的!
這個其實代碼寫起來十分簡單,只是查詢的次數相對來說比較多而已。
if (k == 5) {String sql = "SELECT count(*) departments FROM departments";try {pst = con.prepareStatement(sql);rs = pst.executeQuery();items = new String[1][4];while (rs.next()) {items[0][0] = rs.getString("departments");}sql = "SELECT count(*) jobs FROM jobs";pst = con.prepareStatement(sql);rs = pst.executeQuery();while (rs.next()) {items[0][1] = rs.getString("jobs");}sql = "SELECT count(*) employees FROM employees";pst = con.prepareStatement(sql);rs = pst.executeQuery();while (rs.next()) {items[0][2] = rs.getString("employees");}sql = "SELECT count(*) locations FROM locations";pst = con.prepareStatement(sql);rs = pst.executeQuery();while (rs.next()) {items[0][3] = rs.getString("locations");}} catch (SQLException e) {e.printStackTrace();}}
6)嗯,還有個最后,不要忘記關閉資源哦,最好在后臺管理系統窗口關閉的時候調用,不然提前關閉會出錯。
需要完整代碼的,可以到此下載:https://download.csdn.net/download/yiyexy/10740072
總結
以上是生活随笔為你收集整理的利用java图形用户界面实现后台管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。