【Java基础开发】基于 Java Swing +MySQL + JDBC 版实现图书管理系统

博主介绍:✌全网粉丝阅读量30W+,CSDN特邀作者、博客专家、CSDN新星计划导师,博客之星、平台优质作者、专注于Java技术领域和项目实战✌

🍅文末获取源码联系🍅

一、前言介绍

随着信息技术的飞速发展,传统的手工图书管理方式已难以满足现代图书馆高效、精准的管理需求。图书管理系统作为信息管理系统(MIS)的典型应用,旨在通过计算机技术实现图书信息的数字化存储、智能化检索与规范化管理,从而大幅提升工作效率,降低人工操作失误率。

本项目基于 Java Swing 图形用户界面框架与 MySQL 关系型数据库,设计并实现了一套功能完善的桌面端图书管理系统。系统支持图书信息的增删查改、多条件组合检索以及数据的持久化存储,界面简洁直观,操作便捷高效。通过本项目的开发,不仅加深了对 Java GUI 编程和 JDBC 数据库访问技术的理解,也实践了软件工程中模块化设计、异常处理与人机交互设计的基本思想,为后续从事企业级应用开发奠定了坚实基础。

二、主要技术

技术领域 具体技术 说明
开发语言 Java SE 采用 Java 标准版进行开发,具备良好的跨平台特性
GUI 框架 Java Swing 使用 JFrameJTableJPanel 等组件构建桌面图形界面,采用 BorderLayoutGridLayoutFlowLayout 混合布局管理
数据库 MySQL 选用 MySQL 8.0+ 作为后端关系型数据库,存储图书基本信息
数据库连接 JDBC (Java Database Connectivity) 通过 DriverManager 获取连接,使用 PreparedStatement 执行参数化 SQL,防止 SQL 注入
数据模型 DefaultTableModel 自定义不可编辑的表格模型,实现图书数据在界面的展示与刷新
驱动程序 mysql-connector-j MySQL 官方 JDBC 驱动,支持 com.mysql.cj.jdbc.Driver
异常处理 try-with-resources + 自定义弹窗 统一捕获 SQLException,通过 JOptionPane 向用户反馈友好提示
系统特性 多条件模糊查询、唯一性约束、数据校验 支持书名/作者/ISBN 组合检索,ISBN 设置唯一索引防止重复录入

三、 功能截图

3.1 引入mysql支持的jar包

3.2 代码运行初始化界面

3.3 添加图书功能

点击添加图书按钮, 显示图书添加成功对话框

添加三本图书,展示图书列表

数据库查询,展示图书列表

3.4 查询图书功能

根据书名查询

支持模糊查询

如果查询没有图书,需要展示提示信息!

根据作者查询图书信息

根据ISBN查询图书信息

3.5 删除图书功能

四、代码参考

数据库配置(请根据你的环境修改)

java 复制代码
private static final String DB_URL = "jdbc:mysql://localhost:3306/library_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
private static final String DB_USER = "root";          // 替换为你的用户名
private static final String DB_PASSWORD = "123456"; // 替换为你的密码

初始化数据库:创建 books 表(如果不存在)

java 复制代码
private void initializeDatabase() {
        String createTableSQL = "CREATE TABLE IF NOT EXISTS books (\n" +
                "    id INT AUTO_INCREMENT PRIMARY KEY,\n" +
                "    title VARCHAR(255) NOT NULL,\n" +
                "    author VARCHAR(255) NOT NULL,\n" +
                "    isbn VARCHAR(50) UNIQUE NOT NULL\n" +
                ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";

        try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
             Statement stmt = conn.createStatement()) {
            stmt.execute(createTableSQL);
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(this, "❌ 数据库初始化失败:\n" + e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
    }

Java Swing 初始化图形用户界面的定义

java 复制代码
private void initializeGUI() {
        setTitle("📚 图书管理系统 - MySQL + JDBC 版");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(900, 650);
        setLocationRelativeTo(null);

        String[] columns = {"序号", "书名", "作者", "ISBN"};
        tableModel = new DefaultTableModel(columns, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        bookTable = new JTable(tableModel);
        bookTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        // 添加图书面板
        JPanel inputPanel = new JPanel(new GridLayout(4, 2, 5, 5));
        inputPanel.setBorder(BorderFactory.createTitledBorder("添加新书"));

        titleField = new JTextField();
        authorField = new JTextField();
        isbnField = new JTextField();

        inputPanel.add(new JLabel("书名:"));
        inputPanel.add(titleField);
        inputPanel.add(new JLabel("作者:"));
        inputPanel.add(authorField);
        inputPanel.add(new JLabel("ISBN:"));
        inputPanel.add(isbnField);

        JButton addButton = new JButton("✅ 添加图书");
        addButton.addActionListener(e -> addBookToDB());
        inputPanel.add(new JLabel());
        inputPanel.add(addButton);

        // 查询面板
        JPanel searchPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 5));
        searchPanel.setBorder(BorderFactory.createTitledBorder("多条件查询(留空表示不限)"));

        searchTitle = new JTextField(12);
        searchAuthor = new JTextField(12);
        searchIsbn = new JTextField(12);

        searchPanel.add(new JLabel("书名:"));
        searchPanel.add(searchTitle);
        searchPanel.add(new JLabel("作者:"));
        searchPanel.add(searchAuthor);
        searchPanel.add(new JLabel("ISBN:"));
        searchPanel.add(searchIsbn);

        JButton searchButton = new JButton("🔍 查询");
        JButton deleteButton = new JButton("🗑️ 删除选中");
        JButton refreshButton = new JButton("🔄 刷新");

        searchButton.addActionListener(e -> performSearch());
        deleteButton.addActionListener(e -> deleteSelectedBook());
        refreshButton.addActionListener(e -> loadBooksFromDB());

        searchPanel.add(searchButton);
        searchPanel.add(deleteButton);
        searchPanel.add(refreshButton);

        setLayout(new BorderLayout());
        add(new JScrollPane(bookTable), BorderLayout.CENTER);
        add(inputPanel, BorderLayout.WEST);
        add(searchPanel, BorderLayout.SOUTH);
    }

从数据库加载所有图书

java 复制代码
private void loadBooksFromDB() {
        tableModel.setRowCount(0);
        String sql = "SELECT id, title, author, isbn FROM books ORDER BY id";

        try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(sql)) {

            while (rs.next()) {
                int id = rs.getInt("id");
                String title = rs.getString("title");
                String author = rs.getString("author");
                String isbn = rs.getString("isbn");
                tableModel.addRow(new Object[]{id, title, author, isbn});
            }
        } catch (SQLException e) {
            JOptionPane.showMessageDialog(this, "❌ 加载图书失败:\n" + e.getMessage(), "数据库错误", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
    }

添加图书到数据库

java 复制代码
// 添加图书到数据库
    private void addBookToDB() {
        String title = titleField.getText().trim();
        String author = authorField.getText().trim();
        String isbn = isbnField.getText().trim();

        if (title.isEmpty() || author.isEmpty() || isbn.isEmpty()) {
            JOptionPane.showMessageDialog(this, "❌ 所有字段不能为空!", "输入错误", JOptionPane.WARNING_MESSAGE);
            return;
        }

        String sql = "INSERT INTO books (title, author, isbn) VALUES (?, ?, ?)";
        try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
             PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, title);
            pstmt.setString(2, author);
            pstmt.setString(3, isbn);
            pstmt.executeUpdate();

            JOptionPane.showMessageDialog(this, "✅ 图书添加成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
            clearInputFields();
            loadBooksFromDB(); // 刷新表格

        } catch (SQLException e) {
            if (e.getErrorCode() == 1062) { // Duplicate entry for ISBN
                JOptionPane.showMessageDialog(this, "⚠️ ISBN \"" + isbn + "\" 已存在!", "重复 ISBN", JOptionPane.WARNING_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(this, "❌ 添加失败:\n" + e.getMessage(), "数据库错误", JOptionPane.ERROR_MESSAGE);
            }
            e.printStackTrace();
        }
    }

main主方法(启动类)

java 复制代码
public static void main(String[] args) {
        // 加载 MySQL JDBC 驱动(MySQL 8+ 可省略,但建议保留兼容性)
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            JOptionPane.showMessageDialog(null, "❌ 未找到 MySQL JDBC 驱动!\n请确保 mysql-connector-j.jar 在 classpath 中。",
                    "驱动缺失", JOptionPane.ERROR_MESSAGE);
            return;
        }

        SwingUtilities.invokeLater(() -> {
            try {
                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception ignored) {}
            new LibraryWithDB().setVisible(true);
        });
    }

五、 源码获取

【Java开发学习/项目实战/源代码】 👇点击下方获取👇

相关推荐
Dxy12393102167 分钟前
Python线程锁:为什么多线程会“打架“,以及怎么解决
开发语言·前端·python
guygg8818 分钟前
人行走作用下板的振动响应 MATLAB 仿真
开发语言·matlab
程序员黑豆24 分钟前
Java中怎么实现字符串拼接呢【AI全栈开发】
java
小二·40 分钟前
Next.js 15 全栈开发实战
开发语言·javascript·ecmascript
fox_lht42 分钟前
15.3.改进我们之前的输入、输出项目
开发语言·后端·学习·rust
java1234_小锋1 小时前
LangChain4j 开发Java Agent智能体- 多模态支持
java·开发语言·langchain4j
凡人叶枫1 小时前
Effective C++ 条款23:宁以 non-member、non-friend 替换 member 函数
linux·开发语言·c++·嵌入式开发
艳阳天_.1 小时前
星瀚弹框页面实现
java·前端·python
张忠琳1 小时前
【Go 1.26.4】Golang Channel 深度解析
开发语言·后端·golang