【Java】小白友好的JDBC基础学习笔记

目录

JDBC简介

JDBC使用基本步骤

DriverManager

Connection

Statement

PreparedStatement

ResultSet


JDBC简介

JDBC(Java Database Connectivity)是 Java 提供的一种用于与关系型数据库进行交互的 API(应用程序接口)。它允许 Java 应用程序通过标准的 SQL 语句来访问和操作数据库。

JDBC 提供了一组接口和类,用于连接数据库、执行 SQL 查询和更新操作、处理结果集等。通过 JDBC,开发人员可以使用 Java 代码来实现与数据库的通信,而不需要关注底层数据库的具体实现细节。

JDBC 的主要组件包括:

  1. DriverManager:用于管理数据库驱动程序的加载和连接。

  2. Connection:表示与数据库的连接,通过它可以创建 Statement 或 PreparedStatement 对象来执行 SQL 语句。

  3. Statement 和 PreparedStatement:用于执行 SQL 查询和更新操作,并可以获取结果集。

  4. ResultSet:表示查询结果的集合,开发人员可以使用 ResultSet 对象来访问和处理查询结果。

JDBC使用基本步骤

  1. 加载数据库驱动程序,可以使用 Class.forName() 方法来加载驱动程序类。

  2. 建立与数据库的连接,通过 DriverManager.getConnection() 方法获取 Connection 对象。

  3. 创建 Statement 或 PreparedStatement 对象,通过它们执行 SQL 语句。

  4. 处理查询结果或更新操作。

  5. 关闭连接和相关资源,释放数据库资源。

DriverManager

DriverManager 是 JDBC API 中的一个类,它负责加载和管理数据库驱动程序,并建立与数据库的连接。它提供了一组静态方法,用于注册驱动程序、获取数据库连接和管理驱动程序的加载。

DriverManager 的主要功能包括:

  1. 注册驱动程序:在使用 DriverManager 建立数据库连接之前,需要先注册相应的数据库驱动程序。可以使用 Class.forName() 方法来动态加载驱动程序类,或者直接调用 DriverManager.registerDriver() 静态方法(DriverManager类加载时会自动调用)来注册指定的驱动程序。

  2. 获取数据库连接:通过调用 DriverManager.getConnection() 方法来获取与数据库的连接。该方法接受一个表示数据库 URL、用户名和密码的参数,并返回一个 Connection 对象,通过该对象可以执行 SQL 语句和处理结果集。

  3. 管理驱动程序:DriverManager 负责加载并管理驱动程序。当调用 getConnection() 方法时,DriverManager 会根据传入的数据库 URL 自动选择合适的驱动程序来建立连接。它会按照注册的驱动程序顺序依次尝试,直到找到可用的驱动程序。

Connection

JDBC 的 Connection 接口代表着 Java 程序与数据库之间的连接。它提供了操作数据库的基本方法,包括创建 Statement、PreparedStatement、CallableStatement 对象,管理事务,设置连接属性等。

Connection 接口中一些常用的方法包括:

  1. createStatement():创建一个用于发送简单 SQL 语句的 Statement 对象。
  2. prepareStatement():创建一个 PreparedStatement 对象,用于发送带有参数的 SQL 语句。
  3. setAutoCommit():设置是否自动提交事务。
  4. commit():提交当前事务。
  5. rollback():回滚当前事务。
  6. close():关闭连接。

Statement

JDBC 的 Statement 接口用于执行静态 SQL 语句并返回结果。它是 Connection 接口的一个方法,用于发送简单的 SQL 语句给数据库执行,如查询、插入、更新和删除操作。

Statement 接口中一些常用的方法包括:

  1. executeQuery():用于执行查询语句,返回一个 ResultSet 对象,该对象包含了查询结果。
  2. executeUpdate():用于执行更新语句,返回一个 int 值,表示受影响的行数。
  3. execute():用于执行任意 SQL 语句,可以是查询语句或更新语句,根据语句类型返回不同的结果。
  4. addBatch():将多个 SQL 语句添加到批处理中,以便一次性执行。
  5. clearBatch():清空当前批处理中的所有 SQL 语句。
  6. executeBatch():执行批处理中的所有 SQL 语句,并返回一个 int 数组,表示每个 SQL 语句执行后受影响的行数。
  7. close():关闭 Statement 对象。

PreparedStatement

JDBC 的 PreparedStatement 接口是用于执行带有参数的 SQL 语句的对象。与 Statement 相比,PreparedStatement 具有以下优势:

  1. 预编译:PreparedStatement 对象在执行之前会对 SQL 语句进行预编译,将 SQL 语句和参数分开处理。这样可以提高执行相同 SQL 语句多次的效率,因为数据库只需编译一次即可。

  2. 参数绑定:PreparedStatement 允许将参数绑定到 SQL 语句中,避免了手动拼接 SQL 字符串的麻烦,并且可以有效地防止 SQL 注入攻击。

  3. 可读性和可维护性:使用 PreparedStatement 可以将参数直接嵌入 SQL 语句中,使得 SQL 语句更易读、易维护。

PreparedStatement 接口的常用方法:

  1. setXXX():用于设置 SQL 语句中的参数值,其中 XXX 可以是不同的数据类型,如 setString()、setInt()、setDouble() 等。

  2. executeUpdate():用于执行 INSERT、UPDATE 和 DELETE 等 DML(数据操作语言)语句,并返回受影响的行数。

  3. executeQuery():用于执行 SELECT 查询语句,并返回 ResultSet 对象,用于获取查询结果。

  4. addBatch() 和 executeBatch():用于批量执行多个 SQL 语句。

ResultSet

JDBC 的 ResultSet 接口用于表示 SQL 查询的结果集,它提供了一种类似于游标的方式来遍历查询结果,并可以获取每一行数据的各个字段的值。ResultSet 对象通过执行查询操作获得,它通常由 Statement 或者 PreparedStatement 的 executeQuery() 方法返回。

ResultSet 接口中一些常用的方法包括:

  1. next():将游标移动到下一行,并返回一个布尔值,表示是否存在下一行数据。
  2. getXXX():用于获取当前行指定列的值,其中 XXX 可以是不同的数据类型,如 getString()、getInt()、getDouble() 等。
  3. previous() 和 absolute():移动游标到上一行或指定行。
  4. isFirst()、isLast()、isBeforeFirst()、isAfterLast():判断游标当前位置相对于结果集的位置。
  5. close():关闭 ResultSet 对象,释放数据库资源。

示例:

import java.sql.*;

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

        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            try (Statement statement = connection.createStatement();
                 ResultSet resultSet = statement.executeQuery("SELECT * FROM employees")) {
                while (resultSet.next()) {
                    String name = resultSet.getString("name");
                    int age = resultSet.getInt("age");
                    double salary = resultSet.getDouble("salary");
                    System.out.println("Name: " + name + ", Age: " + age + ", Salary: " + salary);
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
相关推荐
王俊山IT14 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。16 分钟前
c++多线程
java·开发语言
daqinzl24 分钟前
java获取机器ip、mac
java·mac·ip
激流丶39 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue43 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
时差9531 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
Mephisto.java1 小时前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
Mephisto.java1 小时前
【大数据学习 | kafka高级部分】kafka的优化参数整理
大数据·sql·oracle·kafka·json·database