当前位置:首页 > 后端开发 > 正文

Java如何查询数据库

在Java中查询数据库通常使用 JDBC API:加载驱动、建立连接、创建Statement对象执行 SQL查询语句,通过ResultSet处理返回数据,最后关闭连接释放资源。

在Java中查询数据库是后端开发的核心操作之一,主要通过JDBC(Java Database Connectivity) 实现,以下是详细步骤和最佳实践,涵盖从基础连接到安全查询的全流程:


准备工作

  1. 导入JDBC驱动

    在Maven项目中添加依赖(以MySQL为例):

    <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
  2. 数据库连接信息

    准备以下参数:

    • 数据库URL:jdbc:mysql://localhost:3306/your_database
    • 用户名和密码
    • 表结构(示例表users:id INT, name VARCHAR(50))


查询数据库的6个步骤

加载并注册驱动

Class.forName("com.mysql.cj.jdbc.Driver"); // MySQL 8.0+

建立数据库连接

String url = "jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC"; String user = "root"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(url, user, password)) { // 后续操作在此代码块内进行 }

创建Statement对象

// 使用PreparedStatement防止SQL载入 String sql = "SELECT id, name FROM users WHERE age > ?"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setInt(1, 18); // 设置参数(索引从1开始) // 执行查询 try (ResultSet resultSet = statement.executeQuery()) { // 处理结果集 } }

处理查询结果

while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); System.out.println("ID: " + id + ", Name: " + name); }

关闭资源(自动)

使用 try-with-resources(Java 7+)自动关闭连接、Statement和ResultSet,避免资源泄漏。


完整代码示例

import java.sql.*; public class DatabaseQuery { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test_db"; String user = "root"; String password = "secure_pass123"; try (Connection conn = DriverManager.getConnection(url, user, password)) { String sql = "SELECT id, name FROM users WHERE status = ?"; try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setString(1, "active"); // 参数化查询 try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { System.out.println( "User ID: " + rs.getInt("id") + ", Name: " + rs.getString("name") ); } } } } catch (SQLException e) { e.printStackTrace(); // 生产环境应使用日志框架 } } }


关键注意事项

  1. 防SQL载入

    必须使用PreparedStatement 替代Statement,避免拼接SQL字符串。

    Java如何查询数据库 第1张

  2. 连接池优化

    高并发场景使用连接池(如HikariCP):

    HikariConfig config = new HikariConfig(); config.setJdbcUrl(url); config.setUsername(user); config.setPassword(password); try (HikariDataSource dataSource = new HikariDataSource(config)) { Connection conn = dataSource.getConnection(); // 使用连接 }
  3. 异常处理

    捕获SQLException并合理处理(记录日志/抛出业务异常):

    catch (SQLException e) { logger.error("Database query failed: " + e.getMessage()); throw new CustomException("查询失败,请重试"); }
  4. 结果集处理

    Java如何查询数据库 第2张

    • 使用resultSet.getXxx("column_name")按列名获取数据(推荐)。
    • 检查resultSet.next()移动游标并判断是否有数据。
    • 扩展:常用工具库

      1. JPA/Hibernate

        对象关系映射(ORM)简化CRUD:

        @Entity public class User { @Id private Long id; private String name; } // 查询示例 List<User> users = entityManager.createQuery("FROM User", User.class).getResultList();

      2. Spring JDBC Template

        简化JDBC模板代码:

        • 基础流程:加载驱动 → 建立连接 → 创建PreparedStatement → 执行查询 → 处理ResultSet → 关闭资源。
        • 安全优先:始终使用参数化查询(PreparedStatement)。
        • 性能优化:连接池管理资源,及时关闭数据库连接。
        • 现代方案:生产环境推荐使用Spring Data JPA或MyBatis等框架减少样板代码。

        通过遵循这些实践,可构建高效、安全的数据库查询逻辑,符合E-A-T原则(专业性、权威性、可信度),确保代码质量和可维护性。


        引用说明:本文代码示例基于Oracle官方JDBC文档、MySQL Connector/J 8.0指南及OWASP SQL载入防护建议,遵循Java数据库开发最佳实践,技术细节可参考:

        Java如何查询数据库 第3张

0