首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java代码示例:用于从数据库中查询图书信息

Java代码示例:用于从数据库中查询图书信息

原创
作者头像
啦啦啦191
发布2025-11-05 14:42:43
发布2025-11-05 14:42:43
1820
举报
文章被收录于专栏:Java开发Java开发

以下是一个简单的Java代码示例,用于从MySQL数据库中查询图书信息。这个示例包含数据库连接、查询操作和结果处理的完整流程:

前提条件

  1. 已创建MySQL数据库(例如库名:library
  2. 已创建图书表(books),表结构参考:CREATE TABLE books ( id INT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100) NOT NULL, -- 书名 author VARCHAR(50) NOT NULL, -- 作者 isbn VARCHAR(20) UNIQUE, -- ISBN号 status INT DEFAULT 1 -- 状态:1-可借阅,0-已借出 );
  3. 已添加MySQL驱动依赖(Maven项目可在pom.xml中添加):<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency>

代码实现

代码语言:java
复制
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

// 图书实体类(对应数据库表结构)
class Book {
    private int id;
    private String title;
    private String author;
    private String isbn;
    private int status;

    // 构造方法
    public Book(int id, String title, String author, String isbn, int status) {
        this.id = id;
        this.title = title;
        this.author = author;
        this.isbn = isbn;
        this.status = status;
    }

    //  toString方法(用于打印图书信息)
    @Override
    public String toString() {
        return "ID: " + id + 
               ", 书名: " + title + 
               ", 作者: " + author + 
               ", ISBN: " + isbn + 
               ", 状态: " + (status == 1 ? "可借阅" : "已借出");
    }
}

// 图书查询工具类
public class BookQueryExample {
    // 数据库连接信息(请替换为你的实际配置)
    private static final String DB_URL = "jdbc:mysql://localhost:3306/library?useSSL=false&serverTimezone=UTC";
    private static final String USER = "root";       // 数据库用户名
    private static final String PASSWORD = "123456"; // 数据库密码

    public static void main(String[] args) {
        // 查询所有图书
        List<Book> allBooks = queryAllBooks();
        System.out.println("=== 所有图书信息 ===");
        for (Book book : allBooks) {
            System.out.println(book);
        }

        // 按条件查询(例如查询可借阅的图书)
        List<Book> availableBooks = queryBooksByStatus(1);
        System.out.println("\n=== 可借阅图书 ===");
        for (Book book : availableBooks) {
            System.out.println(book);
        }
    }

    /**
     * 查询所有图书
     */
    public static List<Book> queryAllBooks() {
        List<Book> books = new ArrayList<>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            // 1. 加载数据库驱动(MySQL 8.0+ 无需显式加载,可省略)
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 获取数据库连接
            conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);

            // 3. 编写SQL语句
            String sql = "SELECT id, title, author, isbn, status FROM books";

            // 4. 创建PreparedStatement(预编译SQL,防止SQL注入)
            pstmt = conn.prepareStatement(sql);

            // 5. 执行查询,获取结果集
            rs = pstmt.executeQuery();

            // 6. 处理结果集
            while (rs.next()) {
                int id = rs.getInt("id");
                String title = rs.getString("title");
                String author = rs.getString("author");
                String isbn = rs.getString("isbn");
                int status = rs.getInt("status");

                // 将查询结果封装为Book对象
                books.add(new Book(id, title, author, isbn, status));
            }

        } catch (ClassNotFoundException e) {
            System.out.println("数据库驱动加载失败:" + e.getMessage());
        } catch (SQLException e) {
            System.out.println("数据库操作失败:" + e.getMessage());
        } finally {
            // 7. 关闭资源(顺序:ResultSet -> PreparedStatement -> Connection)
            try {
                if (rs != null) rs.close();
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                System.out.println("资源关闭失败:" + e.getMessage());
            }
        }

        return books;
    }

    /**
     * 按状态查询图书(1-可借阅,0-已借出)
     */
    public static List<Book> queryBooksByStatus(int status) {
        List<Book> books = new ArrayList<>();
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;

        try {
            conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
            String sql = "SELECT id, title, author, isbn, status FROM books WHERE status = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, status); // 设置SQL中的参数(?占位符)
            rs = pstmt.executeQuery();

            while (rs.next()) {
                books.add(new Book(
                        rs.getInt("id"),
                        rs.getString("title"),
                        rs.getString("author"),
                        rs.getString("isbn"),
                        rs.getInt("status")
                ));
            }

        } catch (SQLException e) {
            System.out.println("查询失败:" + e.getMessage());
        } finally {
            // 关闭资源(同上)
            try {
                if (rs != null) rs.close();
                if (pstmt != null) pstmt.close();
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return books;
    }
}

代码详解

  1. 实体类(Book):undefined对应数据库中的books表,属性与表字段一一对应,toString()方法用于格式化输出图书信息。
  2. 数据库连接:undefined通过DriverManager.getConnection()获取连接,需要替换DB_URLUSERPASSWORD为你的数据库实际配置。
  3. 查询操作
    • 使用PreparedStatement预编译SQL,避免SQL注入风险。
    • executeQuery()执行查询并返回ResultSet结果集。
    • 遍历结果集,将每条记录封装为Book对象,存入集合中。
  4. 资源关闭:undefined在finally块中关闭ResultSetPreparedStatementConnection,确保资源释放,避免内存泄漏。
  5. 两种查询示例
    • queryAllBooks():查询所有图书。
    • queryBooksByStatus():按状态查询(演示带参数的查询)。

运行说明

  1. 确保数据库和表已创建,并插入测试数据(例如):INSERT INTO books (title, author, isbn, status) VALUES ('Java编程思想', 'Bruce Eckel', '9787111213826', 1), ('深入理解Java虚拟机', '周志明', '9787111641247', 0);
  2. 替换代码中的数据库连接信息(用户名、密码等)。
  3. 运行main方法,即可看到控制台输出查询结果。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提条件
  • 代码实现
  • 代码详解
  • 运行说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档