在Java中如何开发电子书管理应用

来源:AI教程网作者:桃乃木香奈头衔:网络博主
导读:本期聚焦于小伙伴创作的《在Java中如何开发电子书管理应用》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《在Java中如何开发电子书管理应用》有用,将其分享出去将是对创作者最好的鼓励。

在Java中开发电子书管理应用,核心需要解决图形界面展示、电子书数据存储、本地文件管理三个核心问题,通过分层设计可以让应用结构更清晰,后续维护更方便。

应用核心功能规划

电子书管理应用的基础功能包含以下几个部分:

  • 电子书信息录入:支持添加书名、作者、分类、存储路径、上传时间等信息
  • 信息查询与筛选:可以根据书名、作者、分类快速检索目标电子书
  • 电子书删除:支持移除不需要的电子书记录,同时可选择是否删除本地文件
  • 文件打开:点击记录可以直接打开本地对应的电子书文件

技术选型说明

本案例选择以下技术栈实现:

  • 界面层:使用Swing框架,Java原生支持,无需额外引入依赖,跨平台兼容性好
  • 数据层:使用SQLite数据库,轻量无服务,数据文件可以直接随应用打包
  • 文件操作:使用Java NIO的Files类处理文件读写、路径校验等操作

数据库表结构设计

首先需要创建电子书信息存储表,表结构如下:

字段名类型说明
idINTEGER主键,自增
book_nameTEXT电子书名,非空
authorTEXT作者
categoryTEXT分类,如小说、技术、工具书
file_pathTEXT本地文件存储路径,非空
upload_timeTEXT录入时间

核心代码实现

数据库初始化工具类

首先实现SQLite数据库的连接和表创建逻辑:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.SQLException;

public class DBUtil {
    // 数据库文件路径,随应用同级目录存储
    private static final String DB_URL = "jdbc:sqlite:ebook_manage.db";
    
    static {
        try {
            // 加载SQLite驱动
            Class.forName("org.sqlite.JDBC");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    
    // 获取数据库连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(DB_URL);
    }
    
    // 初始化数据库,创建电子书表
    public static void initDB() {
        String createTableSQL = "CREATE TABLE IF NOT EXISTS ebook (" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "book_name TEXT NOT NULL," +
                "author TEXT," +
                "category TEXT," +
                "file_path TEXT NOT NULL," +
                "upload_time TEXT)";
        try (Connection conn = getConnection();
             Statement stmt = conn.createStatement()) {
            stmt.execute(createTableSQL);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

电子书实体类

定义电子书对应的Java实体,用于数据传递:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class EBook {
    private Integer id;
    private String bookName;
    private String author;
    private String category;
    private String filePath;
    private String uploadTime;
    
    // 无参构造
    public EBook() {
        // 默认设置当前时间为上传时间
        this.uploadTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
    }
    
    // 有参构造
    public EBook(String bookName, String author, String category, String filePath) {
        this();
        this.bookName = bookName;
        this.author = author;
        this.category = category;
        this.filePath = filePath;
    }
    
    // getter和setter方法
    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getBookName() {
        return bookName;
    }
    
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    
    public String getAuthor() {
        return author;
    }
    
    public void setAuthor(String author) {
        this.author = author;
    }
    
    public String getCategory() {
        return category;
    }
    
    public void setCategory(String category) {
        this.category = category;
    }
    
    public String getFilePath() {
        return filePath;
    }
    
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }
    
    public String getUploadTime() {
        return uploadTime;
    }
    
    public void setUploadTime(String uploadTime) {
        this.uploadTime = uploadTime;
    }
}

数据操作DAO类

实现电子书的增删查数据操作:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class EBookDAO {
    // 添加电子书
    public boolean addEBook(EBook ebook) {
        String sql = "INSERT INTO ebook (book_name, author, category, file_path, upload_time) VALUES (?, ?, ?, ?, ?)";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, ebook.getBookName());
            pstmt.setString(2, ebook.getAuthor());
            pstmt.setString(3, ebook.getCategory());
            pstmt.setString(4, ebook.getFilePath());
            pstmt.setString(5, ebook.getUploadTime());
            return pstmt.executeUpdate() > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
    
    // 根据分类查询电子书
    public List<EBook> queryByCategory(String category) {
        List<EBook> list = new ArrayList<>();
        String sql = "SELECT * FROM ebook WHERE category = ?";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setString(1, category);
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                EBook ebook = new EBook();
                ebook.setId(rs.getInt("id"));
                ebook.setBookName(rs.getString("book_name"));
                ebook.setAuthor(rs.getString("author"));
                ebook.setCategory(rs.getString("category"));
                ebook.setFilePath(rs.getString("file_path"));
                ebook.setUploadTime(rs.getString("upload_time"));
                list.add(ebook);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
    
    // 删除电子书记录
    public boolean deleteEBook(Integer id) {
        String sql = "DELETE FROM ebook WHERE id = ?";
        try (Connection conn = DBUtil.getConnection();
             PreparedStatement pstmt = conn.prepareStatement(sql)) {
            pstmt.setInt(1, id);
            return pstmt.executeUpdate() > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
}

主界面实现

使用Swing实现简单的电子书管理主界面:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.List;

public class EBookManageFrame extends JFrame {
    private EBookDAO ebookDAO = new EBookDAO();
    private JTextArea resultArea;
    
    public EBookManageFrame() {
        // 初始化窗口
        setTitle("电子书管理应用");
        setSize(800, 600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        
        // 初始化数据库
        DBUtil.initDB();
        
        // 创建顶部操作面板
        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JButton addBtn = new JButton("添加电子书");
        JButton queryBtn = new JButton("查询技术类书籍");
        JButton deleteBtn = new JButton("删除选中书籍");
        topPanel.add(addBtn);
        topPanel.add(queryBtn);
        topPanel.add(deleteBtn);
        add(topPanel, BorderLayout.NORTH);
        
        // 创建结果展示区域
        resultArea = new JTextArea();
        resultArea.setEditable(false);
        JScrollPane scrollPane = new JScrollPane(resultArea);
        add(scrollPane, BorderLayout.CENTER);
        
        // 添加按钮事件
        addBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 弹出添加对话框
                JDialog addDialog = new JDialog(EBookManageFrame.this, "添加电子书", true);
                addDialog.setLayout(new GridLayout(5, 2, 10, 10));
                addDialog.setSize(400, 300);
                
                JTextField nameField = new JTextField();
                JTextField authorField = new JTextField();
                JTextField categoryField = new JTextField();
                JTextField pathField = new JTextField();
                
                addDialog.add(new JLabel("书名:"));
                addDialog.add(nameField);
                addDialog.add(new JLabel("作者:"));
                addDialog.add(authorField);
                addDialog.add(new JLabel("分类:"));
                addDialog.add(categoryField);
                addDialog.add(new JLabel("文件路径:"));
                addDialog.add(pathField);
                
                JButton confirmBtn = new JButton("确认添加");
                addDialog.add(confirmBtn);
                addDialog.add(new JLabel());
                
                confirmBtn.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e1) {
                        String name = nameField.getText().trim();
                        String author = authorField.getText().trim();
                        String category = categoryField.getText().trim();
                        String path = pathField.getText().trim();
                        if (name.isEmpty() || path.isEmpty()) {
                            JOptionPane.showMessageDialog(addDialog, "书名和文件路径不能为空");
                            return;
                        }
                        // 校验文件是否存在
                        File file = new File(path);
                        if (!file.exists()) {
                            JOptionPane.showMessageDialog(addDialog, "文件路径不存在,请检查");
                            return;
                        }
                        EBook ebook = new EBook(name, author, category, path);
                        if (ebookDAO.addEBook(ebook)) {
                            JOptionPane.showMessageDialog(addDialog, "添加成功");
                            addDialog.dispose();
                        } else {
                            JOptionPane.showMessageDialog(addDialog, "添加失败");
                        }
                    }
                });
                addDialog.setLocationRelativeTo(EBookManageFrame.this);
                addDialog.setVisible(true);
            }
        });
        
        // 查询按钮事件
        queryBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                List<EBook> list = ebookDAO.queryByCategory("技术");
                resultArea.setText("");
                if (list.isEmpty()) {
                    resultArea.append("暂无技术类电子书记录");
                    return;
                }
                for (EBook ebook : list) {
                    resultArea.append("ID:" + ebook.getId() + " 书名:" + ebook.getBookName() + 
                            " 作者:" + ebook.getAuthor() + " 路径:" + ebook.getFilePath() + "n");
                }
            }
        });
        
        // 删除按钮事件
        deleteBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String idStr = JOptionPane.showInputDialog(EBookManageFrame.this, "请输入要删除的电子书ID");
                if (idStr == null || idStr.trim().isEmpty()) {
                    return;
                }
                try {
                    Integer id = Integer.parseInt(idStr.trim());
                    if (ebookDAO.deleteEBook(id)) {
                        JOptionPane.showMessageDialog(EBookManageFrame.this, "删除成功");
                    } else {
                        JOptionPane.showMessageDialog(EBookManageFrame.this, "删除失败,请检查ID是否正确");
                    }
                } catch (NumberFormatException ex) {
                    JOptionPane.showMessageDialog(EBookManageFrame.this, "请输入正确的数字ID");
                }
            }
        });
    }
    
    public static void main(String[] args) {
        // 启动应用
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new EBookManageFrame().setVisible(true);
            }
        });
    }
}

功能扩展建议

上述示例实现了基础功能,还可以根据需求扩展更多能力:

  • 增加电子书封面上传功能,将封面路径存储到数据库
  • 添加模糊搜索功能,支持根据书名、作者关键字检索
  • 实现文件打开功能,点击记录调用本地程序打开对应电子书
  • 增加批量导入功能,扫描指定文件夹自动录入电子书信息

Java电子书管理SwingSQLite文件操作修改时间:2026-06-12 12:31:21

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。