JDBC一、JDBC 是什么核心功能二、JDBC 开发步骤固定 7 步1. 准备工作2. 标准步骤三、核心 API 详解1. DriverManager2. Connection数据库连接对象3. Statement / PreparedStatement执行 SQL4. ResultSet结果集四、连接参数必须记住五、基础代码示例查询六、增删改查CRUD执行方法新增示例七、JDBC 工具类封装重复代码使用工具类八、SQL 注入问题九、事务管理手动事务步骤十、数据库连接池重点为什么要用连接池常用连接池Druid 连接池使用十一、JDBC 核心总结面试/考试必背一、JDBC 是什么JDBCJava Database ConnectivityJava 数据库连接是 Java 官方提供的一套操作所有关系型数据库的接口规范。不同数据库厂商MySQL、Oracle、SQLServer提供实现类驱动包我们只需要面向 JDBC 接口编程不用关心底层数据库差异核心功能连接数据库执行 SQL 语句处理查询结果关闭资源二、JDBC 开发步骤固定 7 步1. 准备工作导入数据库驱动包mysql-connector-javaMySQL 5.xcom.mysql.jdbc.DriverMySQL 8.xcom.mysql.cj.jdbc.Driver2. 标准步骤加载驱动MySQL 5.1.6 之后可省略获取数据库连接Connection获取执行 SQL 的对象Statement/PreparedStatement编写 SQL执行 SQL处理结果集ResultSet释放资源三、核心 API 详解1. DriverManager作用获取数据库连接常用方法DriverManager.getConnection(url,user,password);2. Connection数据库连接对象作用代表 Java 和数据库的连接通道核心方法createStatement()获取普通执行对象prepareStatement(sql)获取预编译执行对象推荐setAutoCommit(false)开启事务commit()提交事务rollback()回滚事务3. Statement / PreparedStatement执行 SQLStatement普通执行对象存在 SQL 注入风险。PreparedStatement预编译对象安全、高效企业必用。4. ResultSet结果集作用封装查询语句返回的数据常用方法next()向下移动一行有数据返回 truegetXxx(列名/下标)获取数据getInt/getString/getDate四、连接参数必须记住驱动类 MySQL 8.xcom.mysql.cj.jdbc.Driver URL jdbc:mysql://localhost:3306/数据库名?useSSLfalseserverTimezoneUTCallowPublicKeyRetrievaltrue 用户名root 密码自己的数据库密码五、基础代码示例查询importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassJdbcDemo{publicstaticvoidmain(String[]args)throwsException{// 1. 参数Stringurljdbc:mysql:///test?serverTimezoneUTC;Stringuserroot;Stringpassword123456;// 2. 获取连接ConnectionconnDriverManager.getConnection(url,user,password);// 3. SQLStringsqlSELECT * FROM user WHERE id ?;// 4. 获取预编译对象PreparedStatementpstmtconn.prepareStatement(sql);pstmt.setInt(1,1);// 给 ? 赋值// 5. 执行查询ResultSetrspstmt.executeQuery();// 6. 处理结果while(rs.next()){intidrs.getInt(id);Stringnamers.getString(name);System.out.println(id : name);}// 7. 关闭资源倒序关rs.close();pstmt.close();conn.close();}}六、增删改查CRUD执行方法方法用途executeQuery()查询SELECTexecuteUpdate()增删改INSERT/UPDATE/DELETE新增示例StringsqlINSERT INTO user(name,age) VALUES(?,?);PreparedStatementpstmtconn.prepareStatement(sql);pstmt.setString(1,张三);pstmt.setInt(2,20);introwspstmt.executeUpdate();// 受影响行数System.out.println(rows);七、JDBC 工具类封装重复代码实际开发必须封装工具类避免重复写连接、关闭代码。importjava.sql.*;publicclassJdbcUtil{privatestaticfinalStringURLjdbc:mysql:///test?serverTimezoneUTC;privatestaticfinalStringUSERroot;privatestaticfinalStringPASSWORD123456;// 静态代码块加载驱动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();}}}}使用工具类ConnectionconnJdbcUtil.getConnection();// ... 执行SQL ...JdbcUtil.close(rs,pstmt,conn);八、SQL 注入问题原因使用Statement把用户输入直接拼接到 SQL 中解决方案使用PreparedStatement预编译示例注入用户名 OR 11密码任意拼接后SELECT*FROMuserWHEREusernameOR11ANDpassword...直接登录成功PreparedStatement 可避免。九、事务管理JDBC 默认自动提交事务。手动事务步骤conn.setAutoCommit(false);开启事务执行业务 SQL无异常conn.commit();有异常conn.rollback();try{conn.setAutoCommit(false);// 开启// 执行SQL1// 执行SQL2conn.commit();// 提交}catch(Exceptione){conn.rollback();// 回滚}十、数据库连接池重点为什么要用连接池频繁创建/关闭连接非常消耗资源连接池预先创建一批连接重复使用常用连接池Druid阿里最常用HikariCPSpringBoot 默认C3P0DBCPDruid 连接池使用导入 druid 包编写配置文件druid.properties获取连接配置文件driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql:///test?serverTimezoneUTC usernameroot password123456 initialSize5 maxActive10 maxWait3000工具类importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.sql.Connection;importjava.util.Properties;publicclassDruidUtil{privatestaticDataSourceds;static{try{PropertiespronewProperties();pro.load(DruidUtil.class.getClassLoader().getResourceAsStream(druid.properties));dsDruidDataSourceFactory.createDataSource(pro);}catch(Exceptione){e.printStackTrace();}}publicstaticConnectiongetConnection()throwsException{returnds.getConnection();}}十一、JDBC 核心总结面试/考试必背JDBC 是接口驱动是实现标准步骤加载驱动 → 获取连接 → 预处理SQL → 执行 → 处理结果 → 关闭PreparedStatement 防SQL注入必须封装工具类事务开启 → 提交/回滚企业开发必须使用连接池Druid资源关闭顺序ResultSet → Statement → Connection
【JDBC】
发布时间:2026/6/6 13:56:16
JDBC一、JDBC 是什么核心功能二、JDBC 开发步骤固定 7 步1. 准备工作2. 标准步骤三、核心 API 详解1. DriverManager2. Connection数据库连接对象3. Statement / PreparedStatement执行 SQL4. ResultSet结果集四、连接参数必须记住五、基础代码示例查询六、增删改查CRUD执行方法新增示例七、JDBC 工具类封装重复代码使用工具类八、SQL 注入问题九、事务管理手动事务步骤十、数据库连接池重点为什么要用连接池常用连接池Druid 连接池使用十一、JDBC 核心总结面试/考试必背一、JDBC 是什么JDBCJava Database ConnectivityJava 数据库连接是 Java 官方提供的一套操作所有关系型数据库的接口规范。不同数据库厂商MySQL、Oracle、SQLServer提供实现类驱动包我们只需要面向 JDBC 接口编程不用关心底层数据库差异核心功能连接数据库执行 SQL 语句处理查询结果关闭资源二、JDBC 开发步骤固定 7 步1. 准备工作导入数据库驱动包mysql-connector-javaMySQL 5.xcom.mysql.jdbc.DriverMySQL 8.xcom.mysql.cj.jdbc.Driver2. 标准步骤加载驱动MySQL 5.1.6 之后可省略获取数据库连接Connection获取执行 SQL 的对象Statement/PreparedStatement编写 SQL执行 SQL处理结果集ResultSet释放资源三、核心 API 详解1. DriverManager作用获取数据库连接常用方法DriverManager.getConnection(url,user,password);2. Connection数据库连接对象作用代表 Java 和数据库的连接通道核心方法createStatement()获取普通执行对象prepareStatement(sql)获取预编译执行对象推荐setAutoCommit(false)开启事务commit()提交事务rollback()回滚事务3. Statement / PreparedStatement执行 SQLStatement普通执行对象存在 SQL 注入风险。PreparedStatement预编译对象安全、高效企业必用。4. ResultSet结果集作用封装查询语句返回的数据常用方法next()向下移动一行有数据返回 truegetXxx(列名/下标)获取数据getInt/getString/getDate四、连接参数必须记住驱动类 MySQL 8.xcom.mysql.cj.jdbc.Driver URL jdbc:mysql://localhost:3306/数据库名?useSSLfalseserverTimezoneUTCallowPublicKeyRetrievaltrue 用户名root 密码自己的数据库密码五、基础代码示例查询importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassJdbcDemo{publicstaticvoidmain(String[]args)throwsException{// 1. 参数Stringurljdbc:mysql:///test?serverTimezoneUTC;Stringuserroot;Stringpassword123456;// 2. 获取连接ConnectionconnDriverManager.getConnection(url,user,password);// 3. SQLStringsqlSELECT * FROM user WHERE id ?;// 4. 获取预编译对象PreparedStatementpstmtconn.prepareStatement(sql);pstmt.setInt(1,1);// 给 ? 赋值// 5. 执行查询ResultSetrspstmt.executeQuery();// 6. 处理结果while(rs.next()){intidrs.getInt(id);Stringnamers.getString(name);System.out.println(id : name);}// 7. 关闭资源倒序关rs.close();pstmt.close();conn.close();}}六、增删改查CRUD执行方法方法用途executeQuery()查询SELECTexecuteUpdate()增删改INSERT/UPDATE/DELETE新增示例StringsqlINSERT INTO user(name,age) VALUES(?,?);PreparedStatementpstmtconn.prepareStatement(sql);pstmt.setString(1,张三);pstmt.setInt(2,20);introwspstmt.executeUpdate();// 受影响行数System.out.println(rows);七、JDBC 工具类封装重复代码实际开发必须封装工具类避免重复写连接、关闭代码。importjava.sql.*;publicclassJdbcUtil{privatestaticfinalStringURLjdbc:mysql:///test?serverTimezoneUTC;privatestaticfinalStringUSERroot;privatestaticfinalStringPASSWORD123456;// 静态代码块加载驱动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();}}}}使用工具类ConnectionconnJdbcUtil.getConnection();// ... 执行SQL ...JdbcUtil.close(rs,pstmt,conn);八、SQL 注入问题原因使用Statement把用户输入直接拼接到 SQL 中解决方案使用PreparedStatement预编译示例注入用户名 OR 11密码任意拼接后SELECT*FROMuserWHEREusernameOR11ANDpassword...直接登录成功PreparedStatement 可避免。九、事务管理JDBC 默认自动提交事务。手动事务步骤conn.setAutoCommit(false);开启事务执行业务 SQL无异常conn.commit();有异常conn.rollback();try{conn.setAutoCommit(false);// 开启// 执行SQL1// 执行SQL2conn.commit();// 提交}catch(Exceptione){conn.rollback();// 回滚}十、数据库连接池重点为什么要用连接池频繁创建/关闭连接非常消耗资源连接池预先创建一批连接重复使用常用连接池Druid阿里最常用HikariCPSpringBoot 默认C3P0DBCPDruid 连接池使用导入 druid 包编写配置文件druid.properties获取连接配置文件driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql:///test?serverTimezoneUTC usernameroot password123456 initialSize5 maxActive10 maxWait3000工具类importcom.alibaba.druid.pool.DruidDataSourceFactory;importjavax.sql.DataSource;importjava.sql.Connection;importjava.util.Properties;publicclassDruidUtil{privatestaticDataSourceds;static{try{PropertiespronewProperties();pro.load(DruidUtil.class.getClassLoader().getResourceAsStream(druid.properties));dsDruidDataSourceFactory.createDataSource(pro);}catch(Exceptione){e.printStackTrace();}}publicstaticConnectiongetConnection()throwsException{returnds.getConnection();}}十一、JDBC 核心总结面试/考试必背JDBC 是接口驱动是实现标准步骤加载驱动 → 获取连接 → 预处理SQL → 执行 → 处理结果 → 关闭PreparedStatement 防SQL注入必须封装工具类事务开启 → 提交/回滚企业开发必须使用连接池Druid资源关闭顺序ResultSet → Statement → Connection