【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();
        }
    }
}
相关推荐
m0_7482323910 分钟前
python3 Flask应用 使用 Flask-SQLAlchemy操作MySQL数据库
数据库·mysql·flask
苹果醋316 分钟前
Vue3响应式数据: 深入分析Ref与Reactive
java·运维·spring boot·mysql·nginx
缘友一世33 分钟前
JAVA代理模式和适配器模式
java·代理模式·适配器模式
bohu8335 分钟前
sentinel学习笔记8-系统自适应与黑白名单限流
笔记·sentinel·系统自适应·authorityslot·paramflowslot
轻浮j36 分钟前
Sentinel底层原理以及使用算法
java·算法·sentinel
it噩梦37 分钟前
springboot 工程使用proguard混淆
java·spring boot·后端
深蓝海拓40 分钟前
使用sam进行零样本、零学习的分割实践
人工智能·深度学习·学习·目标检测·计算机视觉
潜意识起点40 分钟前
Java数组:静态初始化与动态初始化详解
java·开发语言·python
竹影卿心42 分钟前
Java连接HANA数据库
java·数据库·windows
anddddoooo1 小时前
Kerberoasting 离线爆破攻击
网络·数据库·安全·microsoft·网络安全