📜  jdbc - Java (1)

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

JDBC - Java介绍

JDBC (Java DataBase Connectivity)是用于在Java应用程序和数据库之间进行连接的Java API。JDBC使用标准的SQL(结构化查询语言)来在Java应用程序中执行SQL语句。

JDBC连接

使用JDBC连接到数据库需要以下步骤:

  1. 加载JDBC驱动程序
  2. 建立连接
  3. 创建语句对象
  4. 执行SQL语句
  5. 处理结果集
  6. 关闭连接
加载JDBC驱动程序

在使用JDBC连接之前,需要加载合适的JDBC驱动程序。

// 加载MySQL驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
建立连接

连接数据库需要使用JDBC的 Connection 接口。创建连接时,需要提供数据库的URL、用户名和密码。

// 数据库URL
String url = "jdbc:mysql://localhost:3306/mydb";

// 数据库用户名和密码
String username = "root";
String password = "root";

// 建立连接
Connection conn = DriverManager.getConnection(url, username, password);
创建语句对象

使用JDBC连接数据库时,还需要创建语句对象。JDBC提供了以下3个语句对象:

  • Statement:用于执行静态SQL语句。
  • PreparedStatement:用于执行预编译SQL语句。
  • CallableStatement:用于执行存储过程。
// 创建PreparedStatement
String sql = "SELECT id, name, age FROM user WHERE id = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
执行SQL语句

执行SQL语句需要调用语句对象的 executeQuery()executeUpdate() 方法。如果执行查询操作,使用 executeQuery() 方法获取结果集。如果执行更新操作,使用 executeUpdate() 方法获取更新的行数。

// 执行查询操作
ResultSet rs = stmt.executeQuery();

// 执行更新操作
int rows = stmt.executeUpdate();
处理结果集

处理结果集需要使用JDBC的 ResultSet 接口。ResultSet 提供了许多方法来获取结果集中的数据。

while (rs.next()) {
    int id = rs.getInt("id");
    String name = rs.getString("name");
    int age = rs.getInt("age");
    // 处理结果集数据
}
关闭连接

关闭连接需要调用连接对象的 close() 方法。JDBC连接对象是实现了 AutoCloseable 接口的。

conn.close();
JDBC事务

JDBC事务用于一起执行的一组SQL语句,被当作一个整体进行提交或回滚。如果一个事务中的任何一条SQL语句失败,整个事务就会回滚。

使用JDBC进行事务管理需要以下步骤:

  1. 禁用自动提交
  2. 执行SQL语句
  3. 提交或回滚事务
  4. 启用自动提交
禁用自动提交

禁用自动提交可以使用 Connection 对象的 setAutoCommit(false) 方法。

conn.setAutoCommit(false);
执行SQL语句

执行SQL语句的步骤与前面介绍的相同。

PreparedStatement stmt1 = conn.prepareStatement(sql1);
PreparedStatement stmt2 = conn.prepareStatement(sql2);
提交或回滚事务

当所有语句执行成功时,调用 commit() 方法提交事务。如果有任意一条语句失败,调用 rollback() 方法回滚事务。

try {
    // 执行SQL语句
    stmt1.executeUpdate();
    stmt2.executeUpdate();

    // 提交事务
    conn.commit();
} catch (SQLException e) {
    // 回滚事务
    conn.rollback();
}
启用自动提交

启用自动提交可以使用 Connection 对象的 setAutoCommit(true) 方法。

conn.setAutoCommit(true);
JDBC批处理

使用JDBC批处理可以一次执行多条SQL语句,提高数据库访问效率。

创建批处理语句对象

创建批处理语句需要使用 StatementPreparedStatement 对象的 addBatch() 方法。

PreparedStatement stmt = conn.prepareStatement(sql1);
stmt.setString(1, "John");
stmt.setString(2, "Doe");
stmt.addBatch();

stmt.setString(1, "Jane");
stmt.setString(2, "Doe");
stmt.addBatch();
执行批处理

执行批处理需要使用语句对象的 executeBatch() 方法。

int[] result = stmt.executeBatch();
处理结果集

处理结果集和前面介绍的相同。

for (int i = 0; i < result.length; i++) {
    // 处理结果集
}
JDBC实例

下面是一个连接MySQL数据库并查询表数据的Java程序示例。

import java.sql.*;

public class JdbcExample {
    public static void main(String[] args) {
        // 加载MySQL驱动程序
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        }

        // 数据库URL
        String url = "jdbc:mysql://localhost:3306/mydb";

        // 数据库用户名和密码
        String username = "root";
        String password = "root";

        // 建立连接
        try (Connection conn = DriverManager.getConnection(url, username, password)) {
            // 创建PreparedStatement
            String sql = "SELECT id, name, age FROM user WHERE id = ?";
            PreparedStatement stmt = conn.prepareStatement(sql);
            stmt.setInt(1, 1);

            // 执行查询操作
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                System.out.println("id = " + id + ", name = " + name + ", age = " + age);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
结语

JDBC是Java应用程序连接数据库的标准API,可以方便地与各种数据库进行通信。熟悉JDBC的使用方法有助于开发高效、可靠、安全的Java数据库应用程序。