上一篇
想象一下,你正在开发一个学生管理系统,当管理员添加新学生时,这些信息不能只存在内存里——否则程序一关闭就全没了,这时候就需要数据库来持久化存储数据,而JDBC就是Java程序与数据库"对话"的桥梁。
上周我帮学弟调试作业时就遇到这个问题:他的程序运行时数据一切正常,但重启后所有学生记录都消失了,今天我就用最直白的方式,带你一步步实现JDBC连接数据库的完整流程。
首先你得有个数据库,比如MySQL(这里以MySQL 8.0为例),去官网下载对应版本的JDBC驱动jar包,然后把它添加到项目的classpath中。
如果你用Maven,直接在pom.xml里添加:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency>
Class.forName("com.mysql.cj.jdbc.Driver");
虽然新版本JDBC可以自动加载驱动,但显式声明更稳妥。
String url = "jdbc:mysql://localhost:3306/student_db?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "123456"; Connection conn = DriverManager.getConnection(url, username, password);
注意替换成你的实际数据库名、用户名和密码。serverTimezone=UTC
参数可以避免时区报错。
Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM students"); while(rs.next()) { System.out.println("学号:" + rs.getInt("id") + " 姓名:" + rs.getString("name")); }
rs.close(); stmt.close(); conn.close();
不关闭连接会导致数据库资源泄露,就像水龙头没关紧一样浪费。
Java 7开始可以用自动资源管理,这样即使出异常也会自动关闭连接:
try (Connection conn = DriverManager.getConnection(url, user, pass); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 1")) { while(rs.next()) { System.out.println(rs.getString(1)); } } catch (SQLException e) { e.printStackTrace(); }
直接拼接SQL字符串很危险,
String sql = "SELECT * FROM users WHERE name='" + name + "'"; // 如果name输入 ' OR '1'='1 就会泄露所有数据
应该用PreparedStatement:
String sql = "INSERT INTO students (name, age) VALUES (?, ?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, "张三"); pstmt.setInt(2, 20); pstmt.executeUpdate(); }
问号?是占位符,能自动处理特殊字符,就像给数据"消毒"一样安全。
当需要多个操作要么全部成功,要么全部失败时:
try { conn.setAutoCommit(false); // 关闭自动提交 // 执行多个SQL语句... stmt.executeUpdate("UPDATE account SET balance=balance-100 WHERE user='A'"); stmt.executeUpdate("UPDATE account SET balance=balance+100 WHERE user='B'"); conn.commit(); // 全部成功才提交 } catch (SQLException e) { conn.rollback(); // 出错就回滚 e.printStackTrace(); } finally { conn.setAutoCommit(true); }
这就像银行转账,必须保证扣款和入账同时成功。
serverTimezone=Asia/Shanghai
现在你已经掌握了JDBC连接数据库的核心要领,下次遇到需要持久化存储数据的场景,就知道怎么让Java程序和数据库"握手"合作了,如果还有疑问,欢迎在评论区交流讨论!
本文由 柯懿 于2025-08-03发表在【云服务器提供商】,文中图片由(柯懿)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/523684.html
发表评论