📜  讨论JDBC(1)

📅  最后修改于: 2023-12-03 14:57:36.531000             🧑  作者: Mango

讨论JDBC

JDBC(Java Database Connectivity)即Java数据库连接,是 Java 标准中的 API。它提供了一个标准的 API,用于连接和操作数据库。

JDBC 架构

JDBC 架构由两个层次组成:

  1. JDBC API:为应用程序提供访问 SQL 数据库的标准 API。
  2. JDBC 驱动程序:由数据库供应商提供,实现 JDBC API 接口,该驱动程序提供与特定数据库系统交互的协议。

JDBC API 层次结构如下:

java.sql
  ├── Connection
  ├── Statement
  ├── ResultSet
  ├── PreparedStatement
  └── CallableStatement
JDBC 使用步骤

使用 JDBC 连接数据库的步骤如下:

  1. 导入 JDBC 相关的类或包。
  2. 注册 JDBC 驱动。
  3. 创建连接对象。
  4. 创建 SQL 语句对象。
  5. 执行 SQL 语句。
  6. 处理结果。
  7. 关闭资源。

示例代码:

import java.sql.*;

public class Demo {
    
    public static void main(String[] args) {
        try {
            // 注册 JDBC 驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            // 创建连接对象
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
            
            // 创建 SQL 语句对象
            Statement stmt = conn.createStatement();
            
            // 执行 SQL 语句
            ResultSet rs = stmt.executeQuery("SELECT * FROM user");
            
            // 处理结果
            while (rs.next()) {
                System.out.println(rs.getString("username"));
            }
            
            // 关闭资源
            rs.close();
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}
JDBC 连接池

JDBC 连接池用于管理数据库连接,它可以避免频繁地创建和销毁连接对象,提高数据库的访问效率。

连接池一般包含以下几个方面:

  1. 最小连接数:连接池中最少的连接数量。
  2. 最大连接数:连接池中最多的连接数量。
  3. 连接超时时间:当一个连接对象超过一定时间未被使用时,自动断开该连接。
  4. 最大等待时间:当连接池没有可用连接时,请求连接的线程最多要等待的时间。
  5. 连接测试时间:当一个连接被使用时,测试该连接是否有效。
  6. 连接对象监听器:用于监听连接池中的连接对象的创建和销毁。

常用的连接池有 Apache Commons DBCP 和 HikariCP。

JDBC 批处理

JDBC 批处理可以将多个 SQL 语句一次性发送给数据库执行,从而提高效率。

示例代码:

import java.sql.*;

public class Demo {
    
    public static void main(String[] args) {
        try {
            // 注册 JDBC 驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            
            // 创建连接对象
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
            
            // 创建 SQL 语句对象
            Statement stmt = conn.createStatement();
            
            // 添加 SQL 语句
            stmt.addBatch("INSERT INTO user (username, password) VALUES ('admin1', '123456')");
            stmt.addBatch("INSERT INTO user (username, password) VALUES ('admin2', '123456')");
            stmt.addBatch("INSERT INTO user (username, password) VALUES ('admin3', '123456')");
            
            // 执行批处理
            int[] results = stmt.executeBatch();
            
            // 关闭资源
            stmt.close();
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}
总结

JDBC 是 Java 数据库连接的标准 API,可以方便地实现 Java 和数据库的交互。在使用 JDBC 时,需要注意关闭连接和释放资源,同时也可以通过连接池和批处理等手段提高数据库的访问效率。