首页...Java数据库编程基础与JDBC入门
Java语言程序设计第九章 Java数据库编程/第一节

Java数据库编程基础与JDBC入门

2026-03-24

第九章 Java数据库编程

第一节 Java数据库编程基础

概述

本节主要介绍Java语言中数据库编程的基础知识,重点讲解JDBC(Java DataBase Connectivity)技术的核心内容。通过学习本节内容,考生能够理解数据库与Java程序的连接原理,掌握JDBC的使用步骤和基本编程方法,为后续复杂数据库操作打下坚实基础。

学习目标:

  • 理解数据库编程的意义及Java中数据库编程的基本流程
  • 掌握JDBC的核心接口和类
  • 能够编写简单的Java数据库连接程序,实现数据的增删改查
  • 熟悉数据库操作中的常见问题及解决方法

核心概念

数据库(Database):用于存储结构化数据的系统,支持数据的存储、管理和查询。

数据库管理系统(DBMS):管理数据库的软件,如MySQL、Oracle、SQL Server等。

JDBC(Java Database Connectivity):Java语言访问数据库的标准API,提供统一的接口来操作不同类型的数据库。

驱动程序(Driver):实现JDBC接口的数据库厂商提供的连接和操作数据库的驱动。

连接对象(Connection):表示Java程序与数据库之间的连接。

语句对象(Statement、PreparedStatement):用于执行SQL语句。

结果集对象(ResultSet):用于存储查询结果。


原理分析

Java数据库编程主要依赖JDBC API,核心原理是通过JDBC驱动程序实现Java程序与数据库的通信。整个过程包括:

  1. 加载数据库驱动:JDBC驱动负责将Java的数据库请求转换为数据库能理解的协议。
  2. 建立数据库连接:通过Connection对象与数据库建立通信通道。
  3. 执行SQL语句:使用Statement或PreparedStatement对象执行增删改查操作。
  4. 处理结果集:查询操作返回ResultSet对象,通过它读取数据。
  5. 关闭资源:释放数据库连接及相关资源,防止内存泄漏。

这种机制保证了Java程序可以独立于具体数据库,实现跨数据库访问。


详细内容

1. JDBC简介与架构

JDBC是Java访问数据库的标准接口,定义了一组API来实现数据库连接和操作。JDBC架构包括四个主要部分:

  • JDBC驱动管理器(DriverManager):负责加载驱动并建立连接。
  • JDBC驱动程序(Driver):实现具体数据库操作。
  • JDBC接口:连接对象(Connection)、语句对象(Statement)、结果集对象(ResultSet)等。
  • 应用程序:使用JDBC接口访问数据库。

JDBC驱动分为四种类型:

  • 类型1:JDBC-ODBC桥驱动
  • 类型2:本地API驱动
  • 类型3:网络协议驱动
  • 类型4:纯Java驱动(最常用)

2. 连接数据库的步骤

编写JDBC程序访问数据库,通常遵循以下步骤:

  1. 加载驱动类
    Class.forName("com.mysql.cj.jdbc.Driver");
    
  2. 建立数据库连接
    Connection conn = DriverManager.getConnection(url, username, password);
    
  3. 创建语句对象
    Statement stmt = conn.createStatement();
    
  4. 执行SQL语句
    • 查询:
      ResultSet rs = stmt.executeQuery("SELECT * FROM users");
      
    • 更新:
      int count = stmt.executeUpdate("INSERT INTO users VALUES (...) ");
      
  5. 处理结果集
    while(rs.next()) {
        String name = rs.getString("name");
        int age = rs.getInt("age");
    }
    
  6. 关闭资源
    rs.close();
    stmt.close();
    conn.close();
    

3. Statement与PreparedStatement的使用

  • Statement适合执行简单的SQL语句,但存在SQL注入风险。
  • PreparedStatement预编译SQL,支持参数设置,更安全且执行效率更高。

示例:

String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 10);
ResultSet rs = ps.executeQuery();

4. 事务管理

JDBC支持事务控制,默认自动提交。通过关闭自动提交,实现事务处理:

conn.setAutoCommit(false);
try {
    // 执行多个数据库操作
    conn.commit();
} catch(SQLException e) {
    conn.rollback();
}

事务保证数据的一致性和完整性。

5. 异常处理与资源释放

数据库操作可能抛出SQLException,必须捕获和处理。建议采用try-with-resources语句自动关闭资源,确保连接不会泄漏。

try (Connection conn = DriverManager.getConnection(...);
     PreparedStatement ps = conn.prepareStatement(...);
     ResultSet rs = ps.executeQuery()) {
    // 处理数据
} catch (SQLException e) {
    e.printStackTrace();
}

实例分析

实例一:连接MySQL数据库并查询数据

背景:从学生信息表中查询所有学生姓名和年龄。

代码分析:

Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/school";
Connection conn = DriverManager.getConnection(url, "root", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT name, age FROM students");
while(rs.next()) {
    System.out.println("姓名:" + rs.getString("name") + ", 年龄:" + rs.getInt("age"));
}
rs.close();
stmt.close();
conn.close();

结论:通过JDBC实现基本查询,理解连接、执行、结果处理流程。

实例二:使用PreparedStatement添加用户数据

背景:向用户表插入新用户,防止SQL注入。

代码分析:

String sql = "INSERT INTO users(username, password) VALUES (?, ?)";
try (Connection conn = DriverManager.getConnection(...);
     PreparedStatement ps = conn.prepareStatement(sql)) {
    ps.setString(1, "alice");
    ps.setString(2, "123456");
    int rows = ps.executeUpdate();
    System.out.println("插入行数:" + rows);
}

结论:PreparedStatement预编译语句提高安全性和效率。

实例三:事务控制示例

背景:银行转账操作,涉及扣款和加款两步操作,需保证事务一致性。

代码分析:

conn.setAutoCommit(false);
try {
    PreparedStatement ps1 = conn.prepareStatement("UPDATE account SET balance = balance - ? WHERE id = ?");
    ps1.setDouble(1, 1000);
    ps1.setInt(2, 1);
    ps1.executeUpdate();

    PreparedStatement ps2 = conn.prepareStatement("UPDATE account SET balance = balance + ? WHERE id = ?");
    ps2.setDouble(1, 1000);
    ps2.setInt(2, 2);
    ps2.executeUpdate();

    conn.commit();
} catch(SQLException e) {
    conn.rollback();
    e.printStackTrace();
}

结论:使用事务保证操作的原子性和数据一致性。


常见误区

  1. 忘记加载驱动类:导致无法连接数据库。正确做法是使用Class.forName加载驱动。
  2. 未关闭数据库资源:容易造成内存泄漏,使用try-with-resources防止。
  3. 使用Statement拼接SQL,导致SQL注入:应使用PreparedStatement。
  4. 忽略异常处理:SQLException必须捕获,防止程序崩溃。
  5. 未正确管理事务:自动提交关闭后忘记commit或rollback,会导致数据不一致。

应用场景

  • 企业级应用数据处理:后台服务与数据库交互,实现用户管理、订单处理等功能。
  • 数据分析与报表生成:从数据库读取数据,进行统计和分析。
  • 网站动态内容管理:通过数据库维护网站内容,实现动态页面展示。
  • 移动应用后台支持:手机应用通过Java服务器端操作数据库,存储用户数据。
  • 教育考试系统:管理考试题库、学生成绩等数据。

知识拓展

  • 连接池技术:如C3P0、DBCP,提升数据库连接效率。
  • ORM框架:如Hibernate、MyBatis,简化数据库操作。
  • SQL优化技巧:索引、查询优化,提升性能。
  • 分布式数据库系统:理解分布式数据库与JDBC的结合。

总结回顾

本节内容系统介绍了Java数据库编程的基础知识,重点掌握了JDBC的工作原理和使用步骤。通过实例演示了如何连接数据库、执行SQL语句及处理结果集。理解并掌握了Statement与PreparedStatement的区别,事务的基本应用,以及异常处理和资源释放的重要性。掌握这些知识是Java数据库编程的基础,为后续深入学习JDBC高级用法及相关框架打下坚实基础。


重点知识点

1

Java数据库编程的意义与JDBC的作用

2

JDBC的核心接口和类:Connection、Statement、PreparedStatement、ResultSet

3

JDBC连接数据库的标准步骤和流程

4

Statement与PreparedStatement的区别与使用场景

5

JDBC事务管理及其在数据一致性中的应用

6

异常处理和资源释放的重要性及实现方法

7

典型的Java数据库编程实例及代码结构

8

常见数据库编程误区及正确操作规范

9

JDBC在实际项目中的应用场景

10

数据库连接池和ORM框架的基础知识拓展