Java连接数据库怎么搞,顺便说说删数据那点事儿到底咋操作比较好
- 问答
- 2026-01-08 04:34:34
- 2
主要整理自《Java核心技术卷II》第4章“数据库编程”、CSDN博客园多篇高赞实践文章以及Oracle官方JDBC教程的核心思路)
直接上干货,Java连数据库就像用手机加别人微信——得先有个连接,然后才能聊天(操作数据),核心就两步:建立连接、执行操作,删数据这事儿得小心,别手滑把家给拆了。
连接数据库:准备三样东西

- 找对驱动包:数据库不是Java亲生的,得有个翻译官,MySQL就用mysql-connector-java.jar,Oracle就用ojdbc.jar,这东西得下载下来扔进项目里(比如Maven项目在pom.xml里写个依赖),告诉Java:“喂,翻译官在这儿!”(来源:Maven中央仓库说明文档)
- 拼接待机号码:连接数据库需要个地址字符串,叫JDBC URL,格式像这样:
jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC,别怕长,就是告诉Java:“数据库在本地(localhost)的3306端口,名字叫这个,用UTF-8聊天,别整SSL加密那些麻烦事儿。”(来源:MySQL官方文档) - 准备账号密码:就是数据库的用户名和密码,跟登录网站一样。
具体连接代码(以MySQL为例):
// 1. 加载驱动(新版本Java其实可以省略这行,但写上保险)
Class.forName("com.mysql.cj.jdbc.Driver");
// 2. 拼接待机号码(URL)
String url = "jdbc:mysql://localhost:3306/test_db?useSSL=false&serverTimezone=Asia/Shanghai";
String user = "root";
String password = "123456";
// 3. 正式建立连接
try (Connection conn = DriverManager.getConnection(url, user, password)) {
System.out.println("数据库连接成功!");
// 后面所有操作都写在这个大括号里
} catch (Exception e) {
e.printStackTrace();
}
(代码逻辑参考自Oracle官方JDBC教程基础示例)
这里用了try-with-resources语法,像个自动管家——无论操作成功失败,它都会帮你自动关闭连接,避免内存泄漏,这是现在最推荐的写法。

删数据那点事儿:重点在“稳”和“准”
删数据最怕什么?一怕删错,二怕删一半断电出bug,所以核心原则是:精确定位,事务兜底。
-
精确定位:WHERE条件绝不能省 删之前必须明确告诉数据库删哪条。
DELETE FROM 表名 WHERE 条件,这个WHERE就是保险栓,比如删用户:“DELETE FROM users WHERE id = 10086”,删之前最好先用SELECT查一下:“SELECT * FROM users WHERE id = 10086”,确认是不是那条“倒霉蛋”。 (来源:《SQL必知必会》第15章关于DELETE的警告)
-
软删除是护身符 如果数据宝贵,最好别真删,给表加个字段,比如
is_deleted,默认是0,删数据时只是把这个字段改成1(UPDATE操作),查数据时加上WHERE is_deleted = 0,这样数据还在硬盘里躺着,万一要恢复还能捞回来,很多公司规范都要求重要数据必须软删除。(来源:CSDN博客园《数据库设计中的软删除实践》高赞回答) -
用事务保平安 如果要删多条相关联的数据(比如删用户顺带删他的订单),必须开启事务,事务就像打包快递——要么全部成功发出,要么全部取消,代码长这样:
try (Connection conn = DriverManager.getConnection(url, user, password)) {
// 关闭自动提交,开启事务
conn.setAutoCommit(false);
// 第一条删除:删用户
String sql1 = "DELETE FROM users WHERE id = ?";
try (PreparedStatement stmt1 = conn.prepareStatement(sql1)) {
stmt1.setInt(1, 10086); // 用问号占位,安全防注入
stmt1.executeUpdate();
}
// 第二条删除:删订单
String sql2 = "DELETE FROM orders WHERE user_id = ?";
try (PreparedStatement stmt2 = conn.prepareStatement(sql2)) {
stmt2.setInt(1, 10086);
stmt2.executeUpdate();
}
// 都没问题?正式提交!
conn.commit();
System.out.println("数据删除成功!");
} catch (Exception e) {
e.printStackTrace();
// 出错了?全部撤销!
if (conn != null) {
try {
conn.rollback();
System.out.println("操作已回滚!");
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
(事务处理模式参考自《Java核心技术卷II》4.4节)
关键点:
conn.setAutoCommit(false):关掉自动提交,不然每句SQL都直接生效,出事来不及拦。PreparedStatement:一定要用这个代替Statement,它会把参数和SQL指令分开放,彻底防止SQL注入攻击(比如黑客输入' OR '1'='1这种恶意参数)。conn.commit():手动确认提交。conn.rollback():在catch里回滚,就像紧急刹车。
连接数据库是体力活,按步骤走就行,删数据是技术活更是责任心活——能软删不硬删,用WHERE精准定位,多步操作必加事务,正式环境删数据前,最好找同事double-check,或者先备份再操作,毕竟代码跑了还能改,数据删了哭都来不及。
本文由瞿欣合于2026-01-08发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/76605.html
