Java實戰之圖書管理系統(JavaFX版)(6)——圖書類別添加功能實現

本節概要

在上一節中實現了主界面代碼,但是沒有涉及到本項目的核心,也沒有使用到數據庫,而在本節將使用到數據庫,實現圖書類別記錄的添加。

 

創建數據庫及表

 

創建實體類

根據數據庫表的列創建實體類。

即在beans目錄下創建BookTypeBean.java,內容如下:

package BookManageSystem.beans;
​
public class BookTypeBean {
    private int bookTypeId;
    private String bookTypeName;
    private String bookTypeDescription;
​
    public BookTypeBean() {}
​
    public BookTypeBean(int bookTypeId, String bookTypeName, String bookTypeDescription) {
        this.bookTypeId = bookTypeId;
        this.bookTypeName = bookTypeName;
        this.bookTypeDescription = bookTypeDescription;
    }
​
    public int getBookTypeId() {
        return bookTypeId;
    }
​
    public void setBookTypeId(int bookTypeId) {
        this.bookTypeId = bookTypeId;
    }
​
    public String getBookTypeName() {
        return bookTypeName;
    }
​
    public void setBookTypeName(String bookTypeName) {
        this.bookTypeName = bookTypeName;
    }
​
    public String getBookTypeDescription() {
        return bookTypeDescription;
    }
​
    public void setBookTypeDescription(String bookTypeDescription) {
        this.bookTypeDescription = bookTypeDescription;
    }
}

 

Dao層方法

接着就是寫添加記錄到數據庫的方法。

在dao包下創建JDBCUtils.java類,該類是dao層的公共方法類,用來連接數據庫和釋放數據庫連接。

package BookManageSystem.dao;
​
import java.sql.*;
​
/**
 * 連接JDBC類
 * @author lck100
 */
public class JDBCUtils {
    //加載驅動,並建立數據庫連接
​
    /**
     * 加載驅動建立數據庫鏈接
     *
     * @return 返回數據庫Connection連接對象
     * @throws SQLException           拋出SQLException
     * @throws ClassNotFoundException 拋出ClassNotFoundException
     */
    static Connection getConnection() throws SQLException, ClassNotFoundException {
        // 加載驅動
        Class.forName("com.mysql.jdbc.Driver");
        // 連接數據庫
        String url = "jdbc:mysql://localhost:3306/db_bookSystem";
        // 數據庫登錄用戶名
        String username = "root";
        // 數據庫登錄密碼
        String password = "admin";
        // 獲取數據庫連接對象並返回Connection對象
        return DriverManager.getConnection(url, username, password);
    }
​
    /**
     * 關閉數據庫連接,釋放資源
     *
     * @param stmt Statement對象
     * @param conn Connection對象
     */
    static void release(Statement stmt, Connection conn) {
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            stmt = null;
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            conn = null;
        }
    }
​
    /**
     * 關閉數據庫連接,釋放資源
     *
     * @param rs   ResultSet對象
     * @param stmt Statement對象
     * @param conn Connection對象
     */
    public static void release(ResultSet rs, Statement stmt, Connection conn) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            rs = null;
        }
        release(stmt, conn);
    }
​
}

接着創建BookTypeDao.java,添加如下內容:

package BookManageSystem.dao;
​
import java.sql.Connection;
import java.sql.Statement;
​
public class BookTypeDao {
​
    /**
     * 操作結果:根據SQL語句執行數據庫的增刪改操作
     *
     * @param sql SQL語句
     * @return boolean 如果操作數據庫成功返回true,否則返回false
     */
    public boolean dataChange(String sql) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //獲得數據的連接
            conn = JDBCUtils.getConnection();
            //獲得Statement對象
            stmt = conn.createStatement();
            //發送SQL語句
            int num = stmt.executeUpdate(sql);
            if (num > 0) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            new JDBCUtils();
            JDBCUtils.release(stmt, conn);
        }
        return false;
    }
}

該類裏只有一個方法,就是添加圖書類別記錄到數據庫中。

 

界面設計

接下來就是創建圖書類別添加界面了,在view包下創建bookTypeAddFrame.fxml文件,使用Scene Builder進行設計,代碼如下:

<?xml version="1.0" encoding="UTF-8"?>
​
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.Font?>
<AnchorPane prefHeight="700.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="BookManageSystem.controller.BookTypeAddFrameController">
    <children>
        <VBox alignment="CENTER" prefHeight="700.0" prefWidth="800.0" spacing="30.0">
            <children>
                <HBox alignment="CENTER" prefHeight="130.0" prefWidth="800.0">
                    <children>
                        <Label prefHeight="51.0" prefWidth="322.0" text="圖書類別添加功能">
                            <font>
                                <Font name="System Bold" size="40.0"/>
                            </font>
                        </Label>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="30.0">
                    <children>
                        <Label text="圖書類別名稱:"/>
                        <TextField fx:id="bookTypeNameTextField"/>
                    </children>
                </HBox>
                <HBox alignment="TOP_CENTER" prefHeight="144.0" prefWidth="600.0" spacing="30.0">
                    <children>
                        <Label text="圖書類別描述:"/>
                        <TextArea fx:id="bookTypeDescriptionTextArea" prefHeight="200.0" prefWidth="200.0"/>
                    </children>
                </HBox>
                <HBox alignment="CENTER" prefHeight="100.0" prefWidth="200.0" spacing="80.0">
                    <children>
                        <Button fx:id="addButton" mnemonicParsing="false" onAction="#do_addButton_event" text="添加"/>
                        <Button fx:id="resetButton" mnemonicParsing="false" onAction="#do_resetButton_event" text="重置"/>
                    </children>
                </HBox>
            </children>
        </VBox>
    </children>
</AnchorPane>

並且在controller包下創建BookTypeAddFrameController.java類,從Scene Builder中複製控制器代碼到該類中:

package BookManageSystem.controller;
​
import BookManageSystem.dao.BookTypeDao;
import BookManageSystem.tools.SimpleTools;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.*;
​
public class BookTypeAddFrameController {
    private SimpleTools simpleTools = new SimpleTools();
​
    @FXML
    private TextField bookTypeNameTextField;
​
    @FXML
    private Button addButton;
​
    @FXML
    private TextArea bookTypeDescriptionTextArea;
​
    @FXML
    private Button resetButton;
​
    // “添加”按鈕的事件監聽器方法
    public void do_addButton_event(ActionEvent event) {
       
    }
​
    // “重置”按鈕的事件監聽器方法
    public void do_resetButton_event(ActionEvent event) {
        
    }
}

運行項目,界面如下:

 

 

實現功能

爲界面按鈕添加圖標,在BookTypeAddFrameController.java中添加如下方法:

    public void initialize() {
        // 初始化按鈕的圖標
        simpleTools.setLabeledImage(new Labeled[]{addButton, resetButton}, new String[]{"src/BookManageSystem/images/add.png",
                "src/BookManageSystem/images/reset.png"});
    }

運行後界面如下:

添加按鈕的事件處理代碼如下:

    // “添加”按鈕的事件監聽器方法
    public void do_addButton_event(ActionEvent event) {
        // 獲取圖書類別名稱
        String bookTypeName = bookTypeNameTextField.getText();
        // 獲取圖書類別描述
        String bookTypeDescription = bookTypeDescriptionTextArea.getText();
        // 組裝插入SQL語句
        String sql =
                "insert into tb_bookType (btName, btDescription) values ('" + bookTypeName + "','" + bookTypeDescription + "');";
        // 執行添加操作並返回操作結果
        boolean isOK = new BookTypeDao().dataChange(sql);
        // 對操作結果進行判斷
        if (isOK) {
            // 添加成功則彈出提示框並清空文本框內容
            simpleTools.informationDialog(Alert.AlertType.INFORMATION, "提示", "信息", "添加成功!");
            bookTypeNameTextField.setText("");
            bookTypeDescriptionTextArea.setText("");
        } else {
            // 添加失敗則彈出提示框
            simpleTools.informationDialog(Alert.AlertType.ERROR, "提示", "錯誤", "添加失敗!");
        }
    }

運行添加如下:

img

img

重置按鈕的事件處理代碼如下:

    // “重置”按鈕的事件監聽器方法
    public void do_resetButton_event(ActionEvent event) {
        // 重置即清空用戶輸入的內容
        simpleTools.clearTextField(bookTypeNameTextField, bookTypeDescriptionTextArea);
    }

運行點擊重置按鈕將清空用戶輸入。

最後就是切換到圖書類別添加界面,所以在MainApp.java中添加如下方法:

    /**
     * 圖書類別添加界面
     *
     * @return 返回一個AnchorPane便於其他控件調用
     */
    public AnchorPane initBookTypeAddFrame() {
        try {
            // 加載FXML佈局文件
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(getClass().getResource("view/bookTypeAddFrame.fxml"));
            AnchorPane root = loader.load();
            return root;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

並在MainFrameController.java中對圖書類別添加菜單項做事件處理:

    /**
     * “圖書類別添加”菜單項的事件處理
     *
     * @param event 事件
     */
    public void do_bookTypeAddMenuItem_event(ActionEvent event) {
        AnchorPane pane = new MainApp().initBookTypeAddFrame();
        mainFrameAnchorPane.getChildren().clear();
        mainFrameAnchorPane.getChildren().add(pane);
    }

 

 

可搜索微信公衆號【Java實例程序】或者掃描下方二維碼關注公衆號獲取更多。

注意:在公衆號後臺回覆【20200225】獲取本節源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章