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 步,增删改查都能套!

相关推荐
Maiko Star14 小时前
* SpringBoot整合LangChain4j
java·spring boot·后端·langchain4j
明月_清风15 小时前
Go语言空接口与类型断言完全指南:从"万能容器"到"类型还原"
后端·go
每天进步一点_JL15 小时前
Spring Boot 缓存体系
后端
百珏15 小时前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
正在走向自律15 小时前
DISTINCT 去重查询为什么这么慢?聊聊我能理解的几种优化思路
后端
OpsEye15 小时前
数据库连接池爆了,这3个命令能救你一次
运维·数据库·后端
绝知此事15 小时前
【产品更名】通义灵码升级为 Qoder CN:AI 编码助手新时代,附大模型收费与 Spring Boot 支持全对比
人工智能·spring boot·后端·idea·ai编程
~|Bernard|15 小时前
GO语言中哪些类型是可比较类型的(==和!=)
开发语言·后端·golang
用户67570498850216 小时前
Celery 太重了?这可能是你一直在找的 asyncio 任务队列
后端·python·消息队列
Cloud_Shy61816 小时前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第十一章 Python 包跟踪器 下篇)
前端·后端·python·数据分析·excel