数据库---JDBC
本系列可作为数据库学习系列的笔记文中提到的一些练习的代码小编会将代码复制下来大家复制下来就可以练习了方便大家学习。点赞关注不迷路您的点赞、关注和收藏是对小编最大的支持和鼓励系列文章目录JAVA初阶---------已更完JAVA数据结构---------已更完数据库---Day 1 数据库基础数据库---Day2 数据库操作数据库---Day3 数据类型数据库---Day4 数据表的操作数据库---Day5 数据表的增删改查数据库---Day6 数据库约束数据库---Day7 数据表设计数据库---Day8 多表联合查询数据库---Day10 索引数据库---Day11 事务数据库---JDBC目录目录系列文章目录目录前言一、什么是JDBC二、为什么需要JDBC第一步第二步第三步第四步三、JDBC架构图四、JDBC工作原理五、搭建JDBC开发环境1 Maven项目2 配置阿里云镜像六、导入MySQL驱动七、JDBC核心接口八、DriverManager九、Connection对象十、连接MySQL数据库1 注册驱动2 获取连接十一、MySQL连接URL详解UTF8编码SSL公钥认证十二、DataSource数据源十三、DriverManager与DataSource区别DriverManagerDataSource对比表十四、Statement对象十五、执行查询十六、执行增删改十七、ResultSet结果集十八、遍历结果集十九、ResultSet游标机制二十、SQL注入问题二十一、什么是SQL注入二十二、PreparedStatement二十三、为什么PreparedStatement防SQL注入二十四、PreparedStatement优势防SQL注入提高性能代码更规范二十五、CallableStatement二十六、资源释放二十七、完整查询案例二十八、JDBC标准CRUD案例查询插入修改删除二十九、JDBC开发规范三十、JDBC执行流程总结三十一、JDBC面试题总结JDBC是什么JDBC核心对象有哪些executeQuery与executeUpdate区别Statement和PreparedStatement区别DataSource为什么比DriverManager好三十二、学习路线总结结语总结前言在Java开发中数据库几乎是所有项目的核心组成部分。无论是电商系统学生管理系统OA办公系统ERP系统银行系统都需要将数据持久化到数据库。那么Java程序如何与MySQL数据库通信答案就是JDBCJava Database ConnectivityJDBC是Java官方提供的一套数据库访问标准接口。它相当于Java程序 ↓ JDBC ↓ MySQL / Oracle / SQLServerJDBC屏蔽了不同数据库之间的差异使Java程序能够通过统一接口访问各种数据库。一、什么是JDBCJDBCJava Database Connectivity中文Java数据库连接技术JDBC本质上是一组接口规范。Java官方负责定义接口Connection Statement PreparedStatement ResultSet数据库厂商负责实现MySQL Driver Oracle Driver SQLServer Driver这样开发者只需要学习一套API即可。二、为什么需要JDBC先回顾人工操作数据库的过程第一步连接数据库mysql -uroot -p第二步输入SQLselect * from student;第三步获取结果Tom Jack Lucy第四步关闭连接exit程序访问数据库其实也是同样流程建立连接 ↓ 发送SQL ↓ 获取结果 ↓ 关闭连接如果没有JDBCJava程序员 ↓ 自己实现MySQL协议 ↓ 自己实现Oracle协议 ↓ 自己实现SQLServer协议工作量巨大。因此Java提出统一接口 厂商实现这就是JDBC诞生的原因。三、JDBC架构图Java程序 │ ▼ JDBC API ┌─────┼─────┐ ▼ ▼ ▼ MySQL Oracle SQLServerJDBC位于应用程序 与 数据库 之间起桥梁作用。四、JDBC工作原理课件中总结为六个步骤1 加载驱动 2 建立连接 3 创建Statement 4 执行SQL 5 处理结果 6 关闭资源完整流程Class.forName() ↓ DriverManager ↓ Connection ↓ Statement ↓ executeQuery() ↓ ResultSet ↓ close()五、搭建JDBC开发环境1 Maven项目创建Maven工程project /project2 配置阿里云镜像mirror idaliyunmaven/id mirrorOf*/mirrorOf url https://maven.aliyun.com/repository/public /url /mirror作用提高依赖下载速度课件中已经给出完整配置。六、导入MySQL驱动在pom.xml中添加dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.33/version /dependency作用让Java拥有访问MySQL能力七、JDBC核心接口JDBC最重要的五个对象DriverManager Connection Statement PreparedStatement ResultSet八、DriverManager作用获取数据库连接例如Connection connection DriverManager.getConnection( url, username, password );九、Connection对象Connection表示数据库连接也叫会话(Session)所有SQL执行必须依赖Connection。十、连接MySQL数据库1 注册驱动Class.forName( com.mysql.cj.jdbc.Driver );2 获取连接Connection connection DriverManager.getConnection( jdbc:mysql://127.0.0.1:3306/test, root, 123456 );十一、MySQL连接URL详解格式jdbc:mysql://IP:端口/数据库名示例jdbc:mysql://127.0.0.1:3306/student_db常见参数UTF8编码characterEncodingutf8SSLuseSSLfalse公钥认证allowPublicKeyRetrievaltrue完整示例jdbc:mysql://127.0.0.1:3306/student_db ?characterEncodingutf8 allowPublicKeyRetrievaltrue useSSLfalse十二、DataSource数据源现代开发推荐DataSource而不是DriverManager创建数据源MysqlDataSource ds new MysqlDataSource(); ds.setURL(url); ds.setUser(root); ds.setPassword(123456);十三、DriverManager与DataSource区别这是面试高频题。DriverManager特点每次创建新连接 每次关闭真实连接问题频繁创建连接 性能差DataSource特点连接池管理 连接可复用关闭连接归还连接池而不是真正关闭对比表对比项DriverManagerDataSource连接创建每次新建连接池性能低高资源利用率低高企业开发很少使用广泛使用十四、Statement对象创建Statement statement connection.createStatement();作用执行SQL十五、执行查询ResultSet rs statement.executeQuery( select * from student );返回ResultSet十六、执行增删改int rows statement.executeUpdate( update student set age20 );返回受影响行数十七、ResultSet结果集ResultSet查询结果集合例如select * from student返回ResultSet十八、遍历结果集while(rs.next()){ }next作用游标下移一行读取字段rs.getLong(id); rs.getString(name); rs.getInt(age);十九、ResultSet游标机制初始状态第一行之前执行rs.next();变成第一行再次执行rs.next();变成第二行直到false表示结束。二十、SQL注入问题这是JDBC最重要知识点之一。错误写法String sql select * from student where name name ;如果用户输入 or 11 --最终SQLselect * from student where name or 11结果返回全部数据数据库被攻击。课件给出了完整案例。二十一、什么是SQL注入本质用户输入参与SQL结构拼接导致SQL语义被篡改严重时数据泄露 数据修改 数据删除二十二、PreparedStatement解决方案PreparedStatement企业开发100%使用。创建PreparedStatement ps connection.prepareStatement( select * from student where name? and class_id? );赋值ps.setString(1,宋江); ps.setLong(2,2);执行ResultSet rs ps.executeQuery();二十三、为什么PreparedStatement防SQL注入原因SQL结构 与 参数值 分离数据库先编译select * from student where name?然后绑定参数宋江即使输入 or 11 --也只会当普通字符串处理。二十四、PreparedStatement优势防SQL注入最重要。提高性能SQL预编译编译一次 执行多次代码更规范?代替字符串拼接二十五、CallableStatement作用调用存储过程例如CallableStatement企业项目较少直接使用。二十六、资源释放必须释放ResultSet Statement Connection顺序后创建先释放即ResultSet ↓ Statement ↓ Connection二十七、完整查询案例查询学号1学生信息PreparedStatement ps connection.prepareStatement( select * from student where id? ); ps.setLong(1,1); ResultSet rs ps.executeQuery(); if(rs.next()){ System.out.println( rs.getString(name) ); }课件第10~11页给出了完整实现。二十八、JDBC标准CRUD案例查询select * from student插入insert into student(name,age) values(?,?)修改update student set age? where id?删除delete from student where id?二十九、JDBC开发规范推荐DataSource PreparedStatement不要Statement 字符串拼接SQL三十、JDBC执行流程总结加载驱动 ↓ 获取连接 ↓ 创建PreparedStatement ↓ 绑定参数 ↓ 执行SQL ↓ 处理ResultSet ↓ 关闭资源三十一、JDBC面试题总结JDBC是什么Java数据库连接规范。JDBC核心对象有哪些DriverManager DataSource Connection Statement PreparedStatement ResultSetexecuteQuery与executeUpdate区别executeQuery返回ResultSet用于selectexecuteUpdate返回int用于insert update deleteStatement和PreparedStatement区别PreparedStatement预编译 防SQL注入 性能更高DataSource为什么比DriverManager好因为连接池 连接复用 性能更高三十二、学习路线总结学习JDBC建议按照下面顺序JDBC基础 ↓ PreparedStatement ↓ 事务(Transaction) ↓ 连接池(Druid/HikariCP) ↓ DBUtils ↓ MyBatis ↓ MyBatis Plus ↓ Spring JDBC ↓ Spring Data JPA结语JDBC是Java后端开发的基础中的基础。虽然企业开发中已经大量使用MyBatisMyBatis PlusSpring Data JPA但这些框架的底层依然建立在JDBC之上。因此掌握JDBC不仅能够帮助我们理解数据库访问原理更是学习MyBatis、SpringBoot持久层框架的必经之路。记住一句话JDBC Java访问数据库的标准规范Connection负责连接数据库PreparedStatement负责安全执行SQLResultSet负责接收查询结果DataSource负责高效管理连接池。这套知识掌握后你已经具备了从 JDBC 进入 MyBatis、SpringBoot 数据持久化开发的基础。全文内容根据《JDBC编程》课件系统整理。总结以上就是今天要讲的内容本文简单记录了数据库学习内容仅作为一份简单的笔记使用大家根据注释理解您的点赞关注收藏就是对小编最大的鼓励