一篇文章帮你认识JDBC!!!

张开发
2026/4/8 0:08:59 15 分钟阅读

分享文章

一篇文章帮你认识JDBC!!!
一、基础概念1. 什么是 JDBCJDBCJava DataBase ConnectivityJava 语言操作关系型数据库的一套API规范 / 接口。作用让 Java 程序可以统一连接、操作 MySQL、Oracle、SQL Server 等数据库。2. JDBC 本质Sun 公司定义接口规范不提供具体实现。各数据库厂商MySQL/Oracle实现这套接口提供数据库驱动 jar 包。我们面向 JDBC 接口编程实际运行由驱动包中的实现类执行。3. 常用数据库框架实际开发几乎不用原生 JDBC优先用 MyBatis/MyBatis-Plus。二、MySQL驱动依赖dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId version8.0.33/version /dependency三、JDBC操作数据库步骤注册驱动获取连接获取执行对象执行 SQL释放资源注意这五个步骤代码是写在IDEA项目里的Test目录下创建的java类四、JDBC执行DML语句核心APIexecuteUpdate ( ) :只能执行DML语句增删改五、JDBC执行DQL语句核心APIResultSet用来封装查询返回的结果executeQuery()执行查询功能rs.next()用来扫描数据库光标向下移动一行有数据返回true无数据返回falsers.getXxx(字段名)获取对应类型数据getInt /getString 等// 1. 注册驱动 Class.forName(com.mysql.cj.jdbc.Driver); // 2. 获取连接 String url jdbc:mysql://localhost:3306/web01; String user root; String pwd 1234; Connection conn DriverManager.getConnection(url, user, pwd); // 3. 预编译 SQL? 为占位符 String sql SELECT id,username,password,name,age FROM user WHERE username? AND password?; PreparedStatement pstmt conn.prepareStatement(sql); // 设置参数 pstmt.setString(1, aqiao); pstmt.setString(2, 123456); // 4. 执行查询 ResultSet rs pstmt.executeQuery(); // 5. 处理结果集 while (rs.next()) { User user new User( rs.getInt(id), rs.getString(username), rs.getString(password), rs.getString(name), rs.getInt(age) ); System.out.println(user); } // 6. 释放资源 rs.close(); pstmt.close(); conn.close();六、预编译SQL1.静态SQL1定义直接将参数硬编码拼接在 SQL 语句中通过Statement对象执行的 SQL2核心特点SQL 语句完全由字符串拼接生成参数直接写死在语句里如update user set age 25 where id 1。每次执行都需要完整走一遍 MySQL 的 SQL 解析、优化、编译、执行全流程。无参数占位符参数直接嵌入 SQL 文本。3代码示例// 1. 获取Statement对象 Statement statement connection.createStatement(); // 2. 拼接参数执行静态SQL int i statement.executeUpdate(update user set age 25 where id 1);2.预编译SQL1定义使用?作为参数占位符先将 SQL 模板发送给数据库预编译再动态传入参数执行的 SQL通过PreparedStatement对象实现。2核心特点SQL 语句使用?占位符参数与 SQL 模板分离如SELECT * FROM user WHERE username ? AND password ?。仅需一次预编译后续执行仅传参复用编译结果性能更高。自动对参数进行转义处理从根源避免 SQL 注入。3代码示例// 1. 预编译SQL模板?为占位符 String sql SELECT * FROM user WHERE username ? AND password ?; PreparedStatement pstmt conn.prepareStatement(sql); // 2. 动态设置参数索引从1开始 pstmt.setString(1, daqiao); pstmt.setString(2, 123456); // 3. 执行预编译SQL ResultSet resultSet pstmt.executeQuery();3.两者区别对比维度静态 SQLStatement预编译 SQLPreparedStatementSQL 结构参数硬编码完整 SQL 字符串?占位符SQL 模板 动态参数SQL 注入风险极高易被攻击完全避免安全性能表现每次执行全流程解析批量操作性能差一次预编译复用缓存批量操作性能高代码可读性拼接繁琐易出错结构清晰参数与 SQL 分离参数处理手动拼接需处理类型、转义自动类型转换、转义无需手动处理适用场景静态不变的 SQL、一次性简单操作动态参数 SQL、批量操作、用户输入场景七、结束语这里提到的JDBC大家只需要了解熟悉即可因为原生JDBC不太常用最常用的是MyBatis之后博主会讲到MyBatis大家可以关注一下哦~

更多文章