【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开发学习/项目实战/源代码】 👇点击下方获取👇

相关推荐
guodingdingh1 小时前
软件开发工作问题总结0718
java·开发语言·数据库
咖啡八杯3 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
优橙教育3 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵3 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel5 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
CodexDave5 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
碎光拾影5 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code6 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121316 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言