【JDBC】
2026/6/6 13:56:13 网站建设 项目流程

JDBC

    • 一、JDBC 是什么?
      • 核心功能
    • 二、JDBC 开发步骤(固定 7 步)
      • 1. 准备工作
      • 2. 标准步骤
    • 三、核心 API 详解
      • 1. DriverManager
      • 2. Connection(数据库连接对象)
      • 3. Statement / PreparedStatement(执行 SQL)
      • 4. ResultSet(结果集)
    • 四、连接参数(必须记住)
    • 五、基础代码示例(查询)
    • 六、增删改查(CRUD)执行方法
      • 新增示例
    • 七、JDBC 工具类(封装重复代码)
      • 使用工具类
    • 八、SQL 注入问题
    • 九、事务管理
      • 手动事务步骤
    • 十、数据库连接池(重点)
      • 为什么要用连接池?
      • 常用连接池
      • Druid 连接池使用
    • 十一、JDBC 核心总结(面试/考试必背)

一、JDBC 是什么?

JDBC(Java Database Connectivity):Java 数据库连接,是 Java 官方提供的一套操作所有关系型数据库的接口(规范)

  • 不同数据库厂商(MySQL、Oracle、SQLServer)提供实现类(驱动包)
  • 我们只需要面向 JDBC 接口编程,不用关心底层数据库差异

核心功能

  1. 连接数据库
  2. 执行 SQL 语句
  3. 处理查询结果
  4. 关闭资源

二、JDBC 开发步骤(固定 7 步)

1. 准备工作

  • 导入数据库驱动包(mysql-connector-java
    • MySQL 5.x:com.mysql.jdbc.Driver
    • MySQL 8.x:com.mysql.cj.jdbc.Driver

2. 标准步骤

  1. 加载驱动(MySQL 5.1.6 之后可省略)
  2. 获取数据库连接(Connection
  3. 获取执行 SQL 的对象(Statement/PreparedStatement
  4. 编写 SQL
  5. 执行 SQL
  6. 处理结果集(ResultSet
  7. 释放资源

三、核心 API 详解

1. DriverManager

  • 作用:获取数据库连接
  • 常用方法:
    DriverManager.getConnection(url,user,password);

2. Connection(数据库连接对象)

  • 作用:代表 Java 和数据库的连接通道
  • 核心方法:
    • createStatement():获取普通执行对象
    • prepareStatement(sql):获取预编译执行对象(推荐)
    • setAutoCommit(false):开启事务
    • commit():提交事务
    • rollback():回滚事务

3. Statement / PreparedStatement(执行 SQL)

  • Statement:普通执行对象,存在 SQL 注入风险
  • PreparedStatement:预编译对象,安全、高效(企业必用)。

4. ResultSet(结果集)

  • 作用:封装查询语句返回的数据
  • 常用方法:
    • next():向下移动一行,有数据返回 true
    • getXxx(列名/下标):获取数据(getInt/getString/getDate

四、连接参数(必须记住)

驱动类: MySQL 8.x:com.mysql.cj.jdbc.Driver URL: jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true 用户名:root 密码:自己的数据库密码

五、基础代码示例(查询)

importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassJdbcDemo{publicstaticvoidmain(String[]args)throwsException{// 1. 参数Stringurl="jdbc:mysql:///test?serverTimezone=UTC";Stringuser="root";Stringpassword="123456";// 2. 获取连接Connectionconn=DriverManager.getConnection(url,user,password);// 3. SQLStringsql="SELECT * FROM user WHERE id = ?";// 4. 获取预编译对象PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.setInt(1,1);// 给 ? 赋值// 5. 执行查询ResultSetrs=pstmt.executeQuery();// 6. 处理结果while(rs.next()){intid=rs.getInt("id");Stringname=rs.getString("name");System.out.println(id+" : "+name);}// 7. 关闭资源(倒序关)rs.close();pstmt.close();conn.close();}}

六、增删改查(CRUD)执行方法

方法用途
executeQuery()查询(SELECT)
executeUpdate()增删改(INSERT/UPDATE/DELETE)

新增示例

Stringsql="INSERT INTO user(name,age) VALUES(?,?)";PreparedStatementpstmt=conn.prepareStatement(sql);pstmt.setString(1,"张三");pstmt.setInt(2,20);introws=pstmt.executeUpdate();// 受影响行数System.out.println(rows);

七、JDBC 工具类(封装重复代码)

实际开发必须封装工具类,避免重复写连接、关闭代码。

importjava.sql.*;publicclassJdbcUtil{privatestaticfinalStringURL="jdbc:mysql:///test?serverTimezone=UTC";privatestaticfinalStringUSER="root";privatestaticfinalStringPASSWORD="123456";// 静态代码块:加载驱动static{try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(ClassNotFoundExceptione){e.printStackTrace();}}// 获取连接publicstaticConnectiongetConnection()throwsSQLException{returnDriverManager.getConnection(URL,USER,PASSWORD);}// 关闭资源publicstaticvoidclose(ResultSetrs,Statementstmt,Connectionconn){if(rs!=null){try{rs.close();}catch(SQLExceptione){e.printStackTrace();}}if(stmt!=null){try{stmt.close();}catch(SQLExceptione){e.printStackTrace();}}if(conn!=null){try{conn.close();}catch(SQLExceptione){e.printStackTrace();}}}}

使用工具类

Connectionconn=JdbcUtil.getConnection();// ... 执行SQL ...JdbcUtil.close(rs,pstmt,conn);

八、SQL 注入问题

  • 原因:使用Statement,把用户输入直接拼接到 SQL 中
  • 解决方案:使用PreparedStatement(预编译)

示例注入:

用户名:' OR '1'='1密码:任意

拼接后:

SELECT*FROMuserWHEREusername=''OR'1'='1'ANDpassword='...'

直接登录成功!PreparedStatement 可避免

九、事务管理

JDBC 默认自动提交事务

手动事务步骤

  1. conn.setAutoCommit(false);开启事务
  2. 执行业务 SQL
  3. 无异常:conn.commit();
  4. 有异常:conn.rollback();
try{conn.setAutoCommit(false);// 开启// 执行SQL1// 执行SQL2conn.commit();// 提交}catch(Exceptione){conn.rollback();// 回滚}

十、数据库连接池(重点)

为什么要用连接池?

  • 频繁创建/关闭连接非常消耗资源
  • 连接池:预先创建一批连接,重复使用

常用连接池

  1. Druid(阿里,最常用)
  2. HikariCP(SpringBoot 默认)
  3. C3P0
  4. DBCP

Druid 连接池使用

  1. 导入 druid 包
  2. 编写配置文件druid.properties
  3. 获取连接

配置文件:

driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql:///test?serverTimezone=UTC username=root password=123456 initialSize=5 maxActive=10 maxWait=3000

工具类:

importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.sql.Connection;importjava.util.Properties;publicclassDruidUtil{privatestaticDataSourceds;static{try{Propertiespro=newProperties();pro.load(DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties"));ds=DruidDataSourceFactory.createDataSource(pro);}catch(Exceptione){e.printStackTrace();}}publicstaticConnectiongetConnection()throwsException{returnds.getConnection();}}

十一、JDBC 核心总结(面试/考试必背)

  1. JDBC 是接口,驱动是实现
  2. 标准步骤:加载驱动 → 获取连接 → 预处理SQL → 执行 → 处理结果 → 关闭
  3. PreparedStatement 防SQL注入
  4. 必须封装工具类
  5. 事务:开启 → 提交/回滚
  6. 企业开发必须使用连接池(Druid)
  7. 资源关闭顺序:ResultSet → Statement → Connection

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询