JDBC 入门大白话文档

(写给 Java 新手看的数据库操作指南)


一、JDBC 到底是啥?

简单说:JDBC 就是 Java 官方定的一套「规矩」,让 Java 代码能统一跟各种数据库(MySQL、Oracle、SQL Server 等)说话。

  • 数据库厂商会按这套规矩写好「驱动包」(比如 MySQL 的 mysql-connector-java-x.x.xx.jar
  • 我们写 Java 代码时,只要对着 JDBC 这套「规矩」写,不用管底层是哪种数据库,换数据库只换驱动就行,代码不用大改

二、JDBC 操作数据库 6 步走(背下来!)

不管是增删改查,核心都是这 6 步:

1. 加载驱动

告诉 Java:我要连 MySQL 啦,用这个驱动!

vbnet 复制代码
Class.forName("com.mysql.cj.jdbc.Driver");

注意:MySQL 8.x 版本用这个驱动名,5.x 版本是 com.mysql.jdbc.Driver


2. 获取数据库连接

相当于跟数据库「拨通电话」,需要 3 个关键信息:

  • url:数据库地址 + 库名 + 一堆解决乱码 / 时区的参数
  • username :数据库用户名(一般是 root
  • password:数据库密码(自己设的)
ini 复制代码
String url = "jdbc:mysql://127.0.0.1:3306/msb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);

url 里的参数解释(大白话版):

  • 127.0.0.1:3306:本机 MySQL 地址和默认端口
  • msb:要连接的数据库名字
  • useSSL=false:关掉安全验证,避免高版本 MySQL 报错
  • useUnicode=true&characterEncoding=UTF-8:保证中文不乱码
  • serverTimezone=Asia/Shanghai:设置时区为东八区,解决时间不对的问题

3. 创建会话对象

相当于「拿个话筒」,用来给数据库发 SQL 指令:

ini 复制代码
Statement sta = conn.createStatement();

注意:这个 Statement 有 SQL 注入风险,正式项目推荐用 PreparedStatement,但入门先学这个简单的


4. 发 SQL 指令并拿结果

分两种情况:增删改查询

情况 A:增 / 删 / 改(DML 操作)

executeUpdate(),返回「受影响的行数」,比如插入 1 条就返回 1

ini 复制代码
// 插入示例
int i = sta.executeUpdate("insert into t_book (id,name,author,price) values (3,'红高粱','莫言',49)");

情况 B:查询(DQL 操作)

executeQuery(),返回一个「结果集」ResultSet,里面装着查出来的所有数据

ini 复制代码
// 查询示例:查价格小于 40 的书
ResultSet rs = sta.executeQuery("select * from t_book where price < 40");

5. 处理结果

处理增删改结果

看返回的数字是不是 >0,大于 0 就代表成功了:

csharp 复制代码
if (i > 0) {
    System.out.println("操作成功!");
} else {
    System.out.println("操作失败!");
}

处理查询结果

ResultSet 像个「表格」,需要用循环一行行读数据:

ini 复制代码
// 循环往下读,直到没数据为止
while (rs.next()) {
    // 按列名拿数据,类型要跟数据库对应
    int id = rs.getInt("id");
    String name = rs.getString("name");
    String author = rs.getString("author");
    double price = rs.getDouble("price");
    // 打印看看
    System.out.println(id + "---" + name + "---" + author + "---" + price);
}

rs.next() 作用:把指针往下挪一行,有数据就返回 true,没数据就 false


6. 关闭资源(非常重要!)

相当于「挂电话 + 收话筒」,顺序不能乱:先关结果集 → 再关会话 → 最后关连接

go 复制代码
rs.close();   // 查询才需要关,增删改没有 ResultSet
sta.close();
conn.close();

不关闭会占着数据库连接,多了会把数据库「挤爆」,导致别人连不上进阶写法:用 try-with-resources,让 Java 自动帮你关,不用写 close()


三、完整代码示例(复制就能跑)

示例 1:插入数据

java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class TestInsert {
    public static void main(String[] args) throws Exception {
        // 1. 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 拿连接
        String url = "jdbc:mysql://127.0.0.1:3306/msb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, "root", "root");
        // 3. 拿会话
        Statement sta = conn.createStatement();
        // 4. 发 SQL
        int i = sta.executeUpdate("insert into t_book (id,name,author,price) values (3,'红高粱','莫言',49)");
        // 5. 看结果
        System.out.println(i > 0 ? "插入成功!" : "插入失败!");
        // 6. 关资源
        sta.close();
        conn.close();
    }
}

示例 2:查询数据

java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class TestSelect {
    public static void main(String[] args) throws Exception {
        // 1. 加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 2. 拿连接
        String url = "jdbc:mysql://127.0.0.1:3306/msb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
        Connection conn = DriverManager.getConnection(url, "root", "root");
        // 3. 拿会话
        Statement sta = conn.createStatement();
        // 4. 发查询 SQL
        ResultSet rs = sta.executeQuery("select * from t_book where price < 40");
        // 5. 遍历结果
        while (rs.next()) {
            System.out.println(rs.getInt("id") + "---" + rs.getString("name"));
        }
        // 6. 关资源
        rs.close();
        sta.close();
        conn.close();
    }
}

四、常见坑 & 避坑指南

  1. 中文乱码 :url 里一定要加 characterEncoding=UTF-8
  2. 时区报错 :url 里加 serverTimezone=Asia/Shanghai
  3. 连接不上:检查 MySQL 服务开没开、端口 / 库名 / 账号密码对不对
  4. SQL 注入Statement 不安全,正式项目用 PreparedStatement
  5. 资源泄漏 :永远记得关连接,或者用 try-with-resources 自动关

五、一句话总结

JDBC 就是「Java 连数据库的固定套路」:加载驱动 → 连库 → 拿会话 → 发 SQL → 处理结果 → 关资源记住这 6 步,增删改查都能套!

相关推荐
李长渊哦2 小时前
OpenClaw 本地部署完全指南:从环境验证到启动运行
后端·arcgis
Java编程爱好者2 小时前
Spring Boot 中关于 Bean 加载、实例化、初始化全生命周期的扩展点
后端
七牛云行业应用2 小时前
别瞎折腾了!4 步排查法,手把手教你搞定 OpenClaw Skills 各种安装报错
后端·openai·agent
Java编程爱好者2 小时前
DBA 经验:MySQL性能最重要的参数只有2个!
后端
武子康2 小时前
大数据-245 离线数仓 - 电商分析 Hive 拉链表入门实战:缓慢变化维 SCD 类型、建表加载与常见错误速查
大数据·后端·apache hive
huahailing10242 小时前
Spring Boot 异步事务最佳实践:TransactionTemplate 实战指南
数据库·spring boot·后端
二月夜2 小时前
记SpringBoot升级Tomcat引发的两类典型问题及解决方案
spring boot·后端·tomcat
神奇小汤圆2 小时前
面试官:什么是 fail-fast?什么是 fail-safe?
后端
忘机山人2 小时前
在 Kubernetes 上用 Fluent Bit 收集 Nginx 日志到 Easysearch
后端