本節概要
在上一節中實現了主界面代碼,但是沒有涉及到本項目的核心,也沒有使用到數據庫,而在本節將使用到數據庫,實現圖書類別記錄的添加。
創建數據庫及表
創建實體類
根據數據庫表的列創建實體類。
即在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, "提示", "錯誤", "添加失敗!");
}
}
運行添加如下:
重置按鈕的事件處理代碼如下:
// “重置”按鈕的事件監聽器方法
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】獲取本節源碼。