JDBC操作数据库1

步骤

1. 注册驱动  (Class.forName
  • 作用:让 Java 识别数据库类型(比如 MySQL、Oracle)。
  • 细节
    • MySQL 8.0+ 版本可省略这一步(驱动会自动加载),但老版本必须写。
      •        从 MySQL 8.0 的 JDBC 驱动开始,mysql-connector-java 驱动包在 META-INF/services 目录下提供了 java.sql.Driver 文件,内容为 com.mysql.cj.jdbc.Driver 。Java 的 ServiceLoader 机制会在类路径中查找 META-INF/services/java.sql.Driver 文件,并自动加载里面指定的驱动类,完成驱动的自动注册。
    • 本质是反射机制:动态加载 com.mysql.cj.jdbc.Driver 类,触发驱动注册。
    •  
      • 两种写法(MySQL 为例)
        • Class.forName("com.mysql.cj.jdbc.Driver");:传统方式,显式加载驱动类 
        • DriverManager.registerDriver(new Driver());:直接注册驱动实例,实际少用,了解即可。
2. 获取连接  (DriverManager.getConnection
Connection connection = DriverManager.getConnection(url, username, password)
  • 作用:建立 Java 与数据库的物理连接(网络通信通道)。
  • 参数重点
    • url 格式:jdbc:mysql://IP:端口/数据库名(本地可写 localhost)。
    • 本机 默认端口可不写 直接是 jdbc:mysql:///数据库名.
      • 代码里写 jdbc:mysql:///数据库名 也能连本地(省略 localhost:3306 ),但连远程数据库得写全 IP 和端口。
3. 创建 Statement(connection.createStatement
Statement statement = connection.createStatement();
  • 作用:创建 “SQL 执行器”,负责把 SQL 发送给数据库执行。
  • 风险点
    • 直接用 Statement 有 SQL 注入风险
    • 适合简单、固定的 SQL
4. 执行 SQL(statement.executeQuery

ResultSet resultSet = statement.executeQuery(sql); 

int rows = statement.executeUpdate("INSERT INTO t_emp VALUES(...)"); 
  
  • 方法选择
    • executeQuery:执行查询 SQL返回 ResultSet 结果集)
    • executeUpdate:执行增删改 SQL(返回受影响行数)。
  • 结果集(ResultSet
    • 似 “临时表”,存储查询结果,需用 next() 逐行遍历。
5. 处理结果(resultSet.next() + getXxx
  • 核心逻辑
    • resultSet.next():移动到下一条数据(返回 true 表示有数据,false 表示结束)。
    • getXxx(columnName):按列名提取数据   (也可用列索引,但列名更直观)。
  • 注意
    • 字段类型要匹配(如 emp_salary 是 double,就用 getDouble),否则报错。
6. 释放资源(close()
  • 必须性
    • 数据库连接、结果集都是稀缺资源,不关闭会导致:
      • 连接池耗尽
      • 内存泄漏(程序占用资源不释放)。
  • 顺序
    • 遵循 “先开后关”ResultSet → Statement → Connection
      • ​​​​  (因为 ResultSet 依赖 StatementStatement 依赖 Connection)。

代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCQuick {
    public static void main(String[] args) throws Exception {
        
        // 【1. 注册驱动】
        // 作用:告诉 Java 程序要连接哪种数据库(这里是 MySQL)
        // 原理:通过反射加载 MySQL 驱动类,让 JDBC 能识别数据库类型
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 【2. 获取连接对象】
        // 作用:建立 Java 程序 ↔ 数据库的物理连接
        // 参数说明:
        // - url: 数据库地址(jdbc:mysql://localhost:3306/atguigu)
        // - username: 数据库账号(root)
        // - password: 数据库密码(atguigu)
        String url = "jdbc:mysql://localhost:3306/atguigu";
        String username = "root";
        String password = "atguigu";
        Connection connection = DriverManager.getConnection(url, username, password);

        // 【3. 获取执行 SQL 的对象】
        // 作用:创建一个“SQL 执行器”,用于发送 SQL 到数据库
        // 后续用它执行查询、插入、修改等 SQL 语句

        Statement statement = connection.createStatement();


        // 【4. 编写 SQL 并执行,接收结果集】
        // 作用:定义要执行的 SQL(这里是查询 t_emp 表数据)
        // executeQuery: 专门用于执行查询 SQL(返回 ResultSet 结果集)

        String sql = "SELECT emp_id,emp_name,emp_salary,emp_age FROM t_emp";
        ResultSet resultSet = statement.executeQuery(sql);


        // 【5. 处理结果:遍历 ResultSet】
        // 作用:逐行读取查询结果,解析数据
        // resultSet.next(): 移动到下一条数据(类似“指针”,初始在第一条前)
        // 通过 getXxx(columnName) 方法,按列名提取数据
        while (resultSet.next()) {
            int empId = resultSet.getInt("emp_id"); // 提取 int 类型字段
            String empName = resultSet.getString("emp_name"); // 提取 String 类型字段
            double empSalary = resultSet.getDouble("emp_salary"); // 提取 double 类型字段
            int empAge = resultSet.getInt("emp_age"); // 提取 int 类型字段
            
            // 简单打印数据
            System.out.println(empId + "\t" + empName + "\t" + empSalary + "\t" + empAge);
        }


        // 【6. 释放资源(必须做!)】
        // 作用:关闭数据库连接,释放资源(避免内存泄漏、连接池耗尽)
        // 顺序:ResultSet → Statement → Connection(先开后关)
        resultSet.close();
        statement.close();
        connection.close();
    }
}

你可能感兴趣的:(JDBC操作数据库1)