当前位置:首页 > 问答 > 正文

数据库连接 JDBC示例 实例教程」JDBC如何实现数据库连接的DEMO演示

手把手教你用JDBC连接数据库:新手也能秒懂的实战演示

场景引入:当程序需要记住数据时

想象一下,你正在开发一个学生管理系统,当管理员添加新学生时,这些信息不能只存在内存里——否则程序一关闭就全没了,这时候就需要数据库来持久化存储数据,而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>

基础四步走:JDBC标准连接流程

加载数据库驱动

Class.forName("com.mysql.cj.jdbc.Driver");

虽然新版本JDBC可以自动加载驱动,但显式声明更稳妥。

数据库连接 JDBC示例 实例教程」JDBC如何实现数据库连接的DEMO演示

建立连接

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参数可以避免时区报错。

执行SQL语句

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();

不关闭连接会导致数据库资源泄露,就像水龙头没关紧一样浪费。


更安全的写法:使用try-with-resources

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注入

直接拼接SQL字符串很危险,

数据库连接 JDBC示例 实例教程」JDBC如何实现数据库连接的DEMO演示

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);
}

这就像银行转账,必须保证扣款和入账同时成功。

数据库连接 JDBC示例 实例教程」JDBC如何实现数据库连接的DEMO演示


常见问题排查

  1. ClassNotFoundException:检查驱动jar包是否导入正确
  2. Access denied for user:检查用户名密码,确认该用户有访问权限
  3. Communications link failure:检查数据库服务是否启动,端口是否正确
  4. 时区错误:在连接URL中添加serverTimezone=Asia/Shanghai

最佳实践建议

  1. 不要把数据库配置硬编码在代码里,建议用properties文件
  2. 考虑使用连接池(如HikariCP)管理连接
  3. 生产环境一定要用SSL加密连接
  4. SQL语句常量建议统一管理

现在你已经掌握了JDBC连接数据库的核心要领,下次遇到需要持久化存储数据的场景,就知道怎么让Java程序和数据库"握手"合作了,如果还有疑问,欢迎在评论区交流讨论!

发表评论