当前位置: 首页 > news >正文

数据库---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区别

DriverManager

DataSource

对比表

十四、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数据库通信

答案就是:

JDBC(Java Database Connectivity)

JDBC是Java官方提供的一套数据库访问标准接口。

它相当于:

Java程序 ↓ JDBC ↓ MySQL / Oracle / SQLServer

JDBC屏蔽了不同数据库之间的差异,使Java程序能够通过统一接口访问各种数据库。

一、什么是JDBC

JDBC:

Java Database Connectivity

中文:

Java数据库连接技术

JDBC本质上是一组接口规范。

Java官方负责定义接口:

Connection Statement PreparedStatement ResultSet

数据库厂商负责实现:

MySQL Driver Oracle Driver SQLServer Driver

这样开发者只需要学习一套API即可。

二、为什么需要JDBC

先回顾人工操作数据库的过程:

第一步

连接数据库

mysql -uroot -p

第二步

输入SQL

select * from student;

第三步

获取结果

Tom Jack Lucy

第四步

关闭连接

exit

程序访问数据库其实也是同样流程:

建立连接 ↓ 发送SQL ↓ 获取结果 ↓ 关闭连接

如果没有JDBC:

Java程序员 ↓ 自己实现MySQL协议 ↓ 自己实现Oracle协议 ↓ 自己实现SQLServer协议

工作量巨大。

因此Java提出:

统一接口 厂商实现

这就是JDBC诞生的原因。

三、JDBC架构图

Java程序 │ ▼ JDBC API ┌─────┼─────┐ ▼ ▼ ▼ MySQL Oracle SQLServer

JDBC位于:

应用程序 与 数据库 之间

起桥梁作用。

四、JDBC工作原理

课件中总结为六个步骤:

1 加载驱动 2 建立连接 3 创建Statement 4 执行SQL 5 处理结果 6 关闭资源

完整流程:

Class.forName() ↓ DriverManager ↓ Connection ↓ Statement ↓ executeQuery() ↓ ResultSet ↓ close()

五、搭建JDBC开发环境

1 Maven项目

创建Maven工程:

<project> </project>

2 配置阿里云镜像

<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <url> https://maven.aliyun.com/repository/public </url> </mirror>

作用:

提高依赖下载速度

课件中已经给出完整配置。

六、导入MySQL驱动

在pom.xml中添加:

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.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编码

characterEncoding=utf8

SSL

useSSL=false

公钥认证

allowPublicKeyRetrieval=true

完整示例:

jdbc:mysql://127.0.0.1:3306/student_db ?characterEncoding=utf8 &allowPublicKeyRetrieval=true &useSSL=false

十二、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 age=20" );

返回:

受影响行数

十七、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 1=1 --

最终SQL:

select * from student where name='' or 1=1

结果:

返回全部数据

数据库被攻击。

课件给出了完整案例。

二十一、什么是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 1=1 --

也只会当普通字符串处理。

二十四、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 ResultSet

executeQuery与executeUpdate区别?

executeQuery

返回:

ResultSet

用于:

select
executeUpdate

返回:

int

用于:

insert update delete

Statement和PreparedStatement区别?

PreparedStatement:

预编译 防SQL注入 性能更高

DataSource为什么比DriverManager好?

因为:

连接池 连接复用 性能更高

三十二、学习路线总结

学习JDBC建议按照下面顺序:

JDBC基础 ↓ PreparedStatement ↓ 事务(Transaction) ↓ 连接池(Druid/HikariCP) ↓ DBUtils ↓ MyBatis ↓ MyBatis Plus ↓ Spring JDBC ↓ Spring Data JPA

结语

JDBC是Java后端开发的基础中的基础。

虽然企业开发中已经大量使用:

  • MyBatis
  • MyBatis Plus
  • Spring Data JPA

但这些框架的底层依然建立在JDBC之上。

因此掌握JDBC不仅能够帮助我们理解数据库访问原理,更是学习MyBatis、SpringBoot持久层框架的必经之路。

记住一句话:

JDBC = Java访问数据库的标准规范;

Connection负责连接数据库;

PreparedStatement负责安全执行SQL;

ResultSet负责接收查询结果;

DataSource负责高效管理连接池。

这套知识掌握后,你已经具备了从 JDBC 进入 MyBatis、SpringBoot 数据持久化开发的基础。全文内容根据《JDBC编程》课件系统整理。


总结

以上就是今天要讲的内容,本文简单记录了数据库学习内容,仅作为一份简单的笔记使用,大家根据注释理解,您的点赞关注收藏就是对小编最大的鼓励!

http://www.jsqmd.com/news/948536/

相关文章:

  • 从4阶段到3阶段:重新思考ViT的‘起手式’,SHViT的大步长Patchify Stem设计为何能省内存又提速度?
  • 从一次真实的Jenkins未授权访问事件复盘:攻击者视角下的入侵路径与应急响应指南
  • DS4Windows:让你的PlayStation手柄在Windows上完美运行
  • BetterJoy:Switch控制器在PC上的全能映射工具
  • 从静态滑翔机到遥控飞机:DIY改装全流程与核心技术解析
  • HoRain云--Codex 权限设置
  • 智能搜索响应延迟下降68%、长尾查询转化率提升3.2倍,我们用这4个开源+私有化AI工具完成了全栈整合
  • 终极Sunshine游戏串流指南:三分钟实现跨设备畅玩
  • GPT-5.5服务化与具身智能理赔:AI责任锚定落地实践
  • 红原县26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • RV1126调试OV5640摄像头,I2C时好时坏?别急着换硬件,先检查这两个驱动配置
  • 【分享】阿启八字排盘1.2[特殊字符]八字排盘|称骨算命|八字合婚
  • 【Redis】Redis 数据结构与 Spring Boot 集成
  • 从TYPE-A到Micro-USB:不同接口的USB3.0线缆,测试标准到底有啥不同?(附串扰指标对比表)
  • 别再为WebRTC通话卡顿发愁了!手把手教你用Coturn在Ubuntu 22.04上搭建自己的TURN中继服务器
  • 双非本科生也能抓住大模型红利期?收藏这份Agent开发实战指南!
  • Matlab实现口罩配送路径优化:低成本运输方案+可视化结果图+可调参数代码
  • 2026呼和浩特正规金银回收门店精选榜单|黄金铂金彩金白银回收靠谱商家电话汇总 - 余生黄金回收
  • 2026可研报告编制公司实力对比:谁更强?深度评测与选择建议 - 资讯纵览
  • 除了UV,这5个指标更能反映小程序的真实健康度
  • Siri等了15年,终于要像个人了:WWDC 2026五天倒计时全预测
  • 【分享】AutoJs6 自动化脚本编写工具 开源完全免费
  • Arduino入门:Tinkercad仿真实现LED闪烁,掌握嵌入式开发基础
  • WarcraftHelper终极指南:5步轻松解决魔兽争霸III现代兼容性问题
  • AI工具链×智能标签协同落地:3步实现标签准确率从68%跃升至92.7%(附企业级评估矩阵)
  • 高效解锁网易云音乐NCM加密文件:Windows图形界面完整解决方案
  • 如何用XUnity.AutoTranslator打破游戏语言壁垒:5个实用技巧让你畅玩全球游戏
  • 广州黄金回收榜单:盘点口碑最好的几家店,附地址全收录指南 - 奢侈品回收评测
  • 紫阳县26年最新专业手表包包回收权威店铺推荐,TOP排行榜 - 莘州文化
  • 【完整题单06、图论算法(最小生成树)】【无】