理论备齐,这节真跑通:装 MySQL → 建库建表 → 导驱动 jar → Demo13 把增删改查四连全打一遍——JDBC 从"看懂"变"会用"。
准备一:装好 MySQL(已装的跳过)
教材配套安装教程(Windows 装 MySQL 8.x 社区版),装的时候记住 root 密码,后面代码里要用。
验收:打开命令行(Win+R 输 cmd),敲:
mysql -u root -p
回车后输密码,看到 mysql> 提示符 = 数据库活着。看到"不是内部或外部命令"= 没配环境变量,按教材补 PATH 那一步。
准备二:建库建表(把舞台搭好)
在 mysql> 里逐条贴(分号结尾!SQL 的规矩):
CREATE DATABASE javaweb CHARACTER SET utf8mb4;
USE javaweb;
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(20),
age INT
);
INSERT INTO student VALUES (1, '波仔', 18), (2, '墨池', 20);
SELECT * FROM student;
验收:最后那句 SELECT 能看到两行数据(波仔、墨池)。
准备三:导驱动 jar(新手第一大卡点,保姆级)
- 下载:搜 "MySQL Connector/J"(MySQL 官网 → Downloads → Community),选 Platform Independent 的 zip,解压拿出
mysql-connector-j-8.x.x.jar——就这一个文件,别的都不用 - 放:在 IDEA 左侧项目根目录右键 → New → Directory,起名
libs→ 把 jar 复制粘贴进去 - 认:右键这个 jar → Add as Library... → 弹窗直接点 OK
- 验收:左侧树展开
External Libraries,能看到那个 jar = IDEA 认它了
只复制不 Add as Library,jar 就是项目里的一块死石头——代码运行时照样 ClassNotFoundException: com.mysql.cj.jdbc.Driver。90% 的"我明明放了 jar"都是死在这。
Demo13:CRUD 四连(五步套路 × 4 段)
import java.sql.*;
public class Demo13 {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/javaweb?serverTimezone=Asia/Shanghai";
Class.forName("com.mysql.cj.jdbc.Driver");
try (Connection conn = DriverManager.getConnection(url, "root", "你的密码");
Statement st = conn.createStatement()) {
// ① 增:INSERT,返回受影响行数
int rows = st.executeUpdate(
"INSERT INTO student VALUES (3, '小波', 19)");
System.out.println("插入 " + rows + " 行");
// ② 查:SELECT,光标逐行爬
ResultSet rs = st.executeQuery("SELECT * FROM student");
while (rs.next()) {
System.out.println(rs.getInt("id") + " "
+ rs.getString("name") + " " + rs.getInt("age"));
}
// ③ 改:UPDATE
rows = st.executeUpdate("UPDATE student SET age = 19 WHERE id = 1");
System.out.println("更新 " + rows + " 行");
// ④ 删:DELETE
rows = st.executeUpdate("DELETE FROM student WHERE id = 2");
System.out.println("删除 " + rows + " 行");
}
}
}
期望控制台输出:
插入 1 行
1 波仔 18
2 墨池 20
3 小波 19
更新 1 行
删除 1 行
跑通 = JDBC 实战毕业。想再确认改删生效,去命令行再 SELECT * FROM student;——年龄变了、墨池没了。
把 Add as Library 那步撤销(或新建个空项目只粘 jar),跑 Demo13 → ClassNotFoundException: com.mysql.cj.jdbc.Driver。类找不到 = 驱动没进类路径,不是数据库的锅。
getConnection 第三参故意写错 → Access denied for user 'root'@'localhost' (using password: YES)——异常信息直接告诉你哪个账号被拒了。
url 里 javaweb 改成 javawebb → Unknown database 'javawebb'——能连上 MySQL(电话通了),只是那间房不存在。
三个实验的异常各不相同——学会看异常信息对症下药,是 JDBC 实战第一基本功。
常见误区
- 「jar 放进项目就算导入」——必须右键 Add as Library,否则
ClassNotFoundException。本节第一大坑,没有之一。 - 「驱动类名随便写」——新版 8.x 是
com.mysql.cj.jdbc.Driver(带 cj);老教程里的com.mysql.jdbc.Driver是旧版类名,配老 jar 才有。 - 「SQL 里的字符串不用引号」——SQL 语法字符串要单引号:
WHERE name = '波仔';用 Java 拼接时双引号套单引号,别弄丢。 - 「增删改也能用 executeQuery」——11.2 的规矩再念一遍:Update 一路、Query 一路,串门即炸。
- 「程序里存的密码就是数据库密码」——
getConnection(url, "root", "密码")里的密码是数据库 root 账号的密码,不是什么程序密码,忘了去 MySQL 安装配置里找。
自测一下
建 libs 文件夹 → 粘 jar → 右键 Add as Library → External Libraries 能看到。漏了 Add as Library(没进类路径)就报 ClassNotFound。
ClassNotFoundException(驱动没导入)、Access denied(账号密码错)、Unknown database(库名错)/ CommunicationsException(MySQL 没启动或端口不对)——看异常信息对症。
全走 Statement:INSERT/UPDATE/DELETE 用 executeUpdate(返回 int 行数),SELECT 用 executeQuery(返回 ResultSet)。
不带引号的是表名/列名(标识符),带单引号的是字符串值。name = 波仔(没引号)会被当成列名 → 报 Unknown column。
骨架: getConnection → createStatement → st.executeUpdate("INSERT INTO student VALUES(" + id + ",'" + name + "'," + age + ")") → 关资源。写完自己品:拼接代码越拼越难受,引号极易写错——这就是下节 PreparedStatement 出场的理由。
下一步学什么
- ☑ 11.3 JDBC编程 ✅ —— 点此复习:第十一章 JDBC/11.3 JDBC编程
- ☑ 11.4 数据库连接池 ✅ —— 点此复习:第十一章 JDBC/11.4 数据库连接池
相关笔记
- 第十一章 JDBC/11.1 什么是JDBC:合同与四大件
- 第十一章 JDBC/11.2 JDBC的常用API:本节所有方法的地基
- 第十章 I-O/10.2 字节流:try-with-resources 姿势
- 第五章 异常/5.2 运行时异常与编译时异常:看异常对症下药的分类功底