JDBC 进阶 API 补充
📅 2026/7/5 3:12:08
👁️ 阅读次数
📝 编程学习
六、JDBC 进阶 API 补充
获取自增主键(新增后拿到数据库自增 ID)
场景:插入数据后,需要获取主键自增值。
// 创建对象时指定:返回自增主键 String sql = "insert into user(name) values(?)"; pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, "王五"); pstmt.executeUpdate(); // 获取自增主键结果集 ResultSet keys = pstmt.getGeneratedKeys(); if(keys.next()){ int id = keys.getInt(1); System.out.println("自增主键ID:" + id); }批处理 Batch(批量增删改)
大量数据插入时使用,大幅提升效率:
String sql = "insert into user(name) values(?)"; pstmt = conn.prepareStatement(sql); // 循环添加参数 + 加入批处理 for (int i = 0; i < 1000; i++) { pstmt.setString(1, "用户" + i); pstmt.addBatch(); // 添加到批任务 } pstmt.executeBatch(); // 批量执行 pstmt.clearBatch(); // 清空批任务JDBC 常用异常
ClassNotFoundException:驱动类找不到(jar 包缺失、类名写错)SQLSyntaxErrorException:SQL 语法错误SQLInvalidAuthorizationSpecException:账号 / 密码错误CommunicationsException:IP、端口错误,数据库未启动
七、关键总结(面试 / 考点)
六大核心 API:
Driver、DriverManager、Connection、Statement、PreparedStatement、ResultSet优先使用 PreparedStatement:防 SQL 注入、预编译高效
占位符
?索引从 1 开始,不能加单引号MySQL8 必须配置
serverTimezone时区参数资源关闭顺序:
ResultSet > Statement > ConnectionJDBC 事务默认自动提交,手动事务需
setAutoCommit(false)
八、工具类封装(实战常用)
把重复的加载驱动、获取连接、释放资源封装成工具类,项目标准写法:
import java.sql.*; public class JdbcUtil { // 静态常量 private static final String DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String URL = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC"; private static final String USER = "root"; private static final String PWD = "123456"; // 静态代码块:只加载一次驱动 static { try { Class.forName(DRIVER); } catch (ClassNotFoundException e) { e.printStackTrace(); } } // 获取连接 public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PWD); } // 释放资源(重载方法) public static void close(Connection conn, PreparedStatement pstmt) { close(conn, pstmt, null); } public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
编程学习
技术分享
实战经验