Java数据库连接SQL指南 | AI生成和翻译

Home 2025.07

java.sql 包是 Java JDBC API(Java 数据库连接)的核心组成部分,使 Java 应用程序能够与 MySQL、PostgreSQL、Oracle、SQL Server 等关系型数据库进行交互。它提供了连接数据库、执行 SQL 查询和检索结果所需的接口和类。


📘 java.sql 概述

java.sql 包包含的类和接口可用于:


🔧 设置:所需准备

1. JDBC 驱动程序

2. 数据库 URL

每个 JDBC 驱动程序都有其连接 URL 格式:

jdbc:mysql://localhost:3306/mydatabase
jdbc:postgresql://localhost:5432/mydatabase

🧩 关键类和接口

🔌 1. DriverManager

建立与数据库的连接。

Connection conn = DriverManager.getConnection(url, user, password);

🧵 2. Connection

表示与数据库的会话。

Connection conn = DriverManager.getConnection(...);
conn.setAutoCommit(false);  // 用于手动事务控制

📤 3. Statement / PreparedStatement / CallableStatement

Statement

用于执行静态 SQL 查询。

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");

PreparedStatement

用于执行参数化查询。避免 SQL 注入。

PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
ps.setInt(1, 101);
ResultSet rs = ps.executeQuery();

CallableStatement

用于存储过程。

CallableStatement cs = conn.prepareCall("{call getUser(?)}");
cs.setInt(1, 5);
ResultSet rs = cs.executeQuery();

📥 4. ResultSet

保存查询结果。

while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
}

📚 5. 元数据

DatabaseMetaData dbMeta = conn.getMetaData();
ResultSetMetaData rsMeta = rs.getMetaData();

🧪 基础示例

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/testdb";
        String user = "root";
        String password = "password";

        try (Connection conn = DriverManager.getConnection(url, user, password)) {
            String sql = "SELECT * FROM users WHERE age > ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, 18);

            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getInt("id") + " - " + rs.getString("name"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

🔁 事务

conn.setAutoCommit(false);  // 禁用自动提交

try {
    PreparedStatement ps1 = conn.prepareStatement("UPDATE accounts SET balance = balance - ? WHERE id = ?");
    ps1.setDouble(1, 100.0);
    ps1.setInt(2, 1);
    ps1.executeUpdate();

    PreparedStatement ps2 = conn.prepareStatement("UPDATE accounts SET balance = balance + ? WHERE id = ?");
    ps2.setDouble(1, 100.0);
    ps2.setInt(2, 2);
    ps2.executeUpdate();

    conn.commit(); // 提交事务

} catch (SQLException ex) {
    conn.rollback(); // 出错时回滚
}

异常处理

try {
    // 数据库代码
} catch (SQLException ex) {
    System.err.println("Error Code: " + ex.getErrorCode());
    System.err.println("SQL State: " + ex.getSQLState());
    ex.printStackTrace();
}

🧰 java.sql 中的实用功能

功能 接口/类 用途
元数据 DatabaseMetaData 数据库版本、支持的功能、表等
结果列信息 ResultSetMetaData 列数、类型、标签等
BLOB/CLOB 处理 Blob, Clob 存储/检索大型二进制/文本数据
批量执行 addBatch(), executeBatch() 一起执行多个语句
可滚动 ResultSet ResultSet.TYPE_SCROLL_INSENSITIVE 前后移动游标
可更新 ResultSet ResultSet.CONCUR_UPDATABLE 直接在 ResultSet 中修改行

📦 Maven 依赖示例 (MySQL)

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

🧠 最佳实践


🧮 高级主题


🧾 总结表格

任务 类/接口
连接数据库 DriverManager, Connection
执行 SQL Statement, PreparedStatement
存储过程 CallableStatement
读取结果 ResultSet
数据库信息 DatabaseMetaData
列信息 ResultSetMetaData
事务 Connection.commit(), rollback()
异常处理 SQLException

如果您需要,我还可以提供:

请告诉我!


Back Donate