MySQL进阶(再论JDBC)——JDBC编程思想的分析 JDBC的规范架构 JDBC相关的类分析

前言
SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言,可以用于多种关系型数据库管理系统(RDBMS),如MySQL、Oracle、SQL Server等。
MySQL是一种开源的关系型数据库管理系统,它使用SQL作为其查询语言。MySQL是最流行的开源数据库之一,它具有高性能、可靠性和可扩展性。MySQL支持多用户、多线程和多表操作,可以在各种操作系统上运行。
MySQL最为最流行的开源数据库,其重要性不言而喻,也是大多数程序员接触的第一款数据库,深入认识和理解MySQL也比较重要。

本篇博客介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接,阐述了JDBC的编程思想,介绍了各个API接口的分工,并且对于JDBC相关的类进行详细的分析。
其他相关的JDBC博客文章如下:
Java连接SQL数据库 & 单例封装数据库
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C6IBnBmB-1683902514958)(D:\javalearn\思维导图笔记\mdPictures\image-20230512204643739.png)]](https://img-blog.csdnimg.cn/bf0e382a7536417db3022fe9f2def658.png)
本系列文章合集如下:
【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身
目录
- 引出
- JDBC它是什么
- JDBC编程思想
- JDBC流程
- 编写流程
- JDBC规范架构
- API分工
- JDBC类的分析
- DriverMananger类
- 1. 作用
- 2. 静态方法
- 3. 连接字符串:
- 4. 连接数据库代码
- Connection接口
- 1. 介绍
- 2. 方法
- PreparedStatement接口
- 1. Statement和PreparedStatement
- 2. PreparedStatement接口中方法
- ResultSet接口
- 1. 作用
- 2. 如何获取数据
- 3. 方法
- 4. MySQL中数据类型与Java数据类型对应关系
- 5. 查询代码
- 总结
引出
1.介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接;
2.阐述了JDBC的编程思想,介绍了各个API接口的分工;
3.对于JDBC相关的类进行详细的分析;
JDBC它是什么
1、JDBC全称Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接
2、JDBC是一组API,通过这些API可以很轻松的操作各种数据库。
JDBC:Java DataBase Connectivity (Java 数据库连接),使用Java语言来操作关系型数据库的一组API(应用程序接口),JDBC本质上是一组接口,实现类由数据库厂商提供。
JDBC编程思想
高度封装,操作数据库只需要和API (接口和类,几个对象)打交道,具体实现交给JDBC来完成即可。
- 跨数据库

如果没有JDBC,我们在会根据每种数据库,都要单独编写一组代码。

我们只需要针对JDBC接口进行编程即可,好处:
- 降低我们的代码与具体数据库之间耦合度。
- 同一套代码可以访问不同的数据库
- 也是多态的好处体现
实现类称为数据库驱动包,需要额外从网上下载。
JDBC流程
左边是客户端Java代码,右边是服务器端MySQL

编写流程
- 注册驱动程序 (从JDK5可以省略,
Class.forName("com.mysql.jdbc.Driver")) - 获取连接对象
- 通过连接对象获取语句对象
- 发送SQL语句给数据库服务器,由服务器去执行SQL语句。
- 获取数据库返回的结果集,处理结果集。
- 关闭连接,释放资源
JDBC规范架构

驱动就是由不同厂商提供的jar包。

API分工


JDBC类的分析
DriverMananger类
1. 作用
- 加载并且注册数据库驱动
- 获取连接对象
2. 静态方法
public static Connection getConnection(String 连接字符串, String 用户名, String 密码) throws SQLException
3. 连接字符串:
不同的数据库,连接字符串的格式不同。MySQL的连接字符串:

MySQL的连接URL编写方式
jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
jdbc:mysql://localhost:3306/persondb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
4. 连接数据库代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class AppDemo1 {public static void main(String[] args) throws SQLException {//获取连接对象,Connection是一个接口,返回的是它的实现类,这是一种多态。实现类由MySQL驱动提供。Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/woniu", "root", "root");//输出连接对象System.out.println("连接对象:" + connection);//关闭连接对象connection.close();}
}
Connection接口
1. 介绍
Connection代表连接对象,是一个接口,由数据库厂商提供实现类。
2. 方法
创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
PreparedStatement prepareStatement(String sql) 参数是SQL语句,占带有占位符,占位符使用问号?表示。
PreparedStatement接口的实现类由数据库驱动提供
注:所有的参数使用占位符,为什么使用占位符:
- 可以避免SQL注入的风险
- 占位符是可变的,查询语句更加灵活。
PreparedStatement接口
1. Statement和PreparedStatement
获取访问数据库的语句对象:
- Statement:父接口,有SQL注入的安全问题,在后期很少使用。
- PreparedStatement:子接口,预编译的语句对象,执行效率更高,没有安全问题,使用这个。
interface PreparedStatement extends Statement
2. PreparedStatement接口中方法
| PreparedStatement接口中的方法 | 描述 |
|---|---|
int executeUpdate() | 执行增删改的操作,返回值:影响的行数 |
ResultSet executeQuery() | 执行查询的操作,返回值:返回结果集 |
void set数据类型(int 占位符位置,类型类型 真实的值) | 替换SQL语句中占位符为真实的值: 参数1:在SQL语句中占位符出现的位置,从1开始 参数2:替换这个占位符的值 |
ResultSet接口
1. 作用
封装服务器端返回的数据,我们只需要从ResultSet中取出数据即可。
2. 如何获取数据

3. 方法
| 方法名 | 作用 |
|---|---|
| boolean next() | 将光标从当前位置向下移动一行。如果下一行有数据,返回true,如果到最后返回false |
| 数据类型 get数据类型(int 列号) | 通过列号获取数据 |
| 数据类型 get数据类型(String 列名) | 通过列名获取数据 |
4. MySQL中数据类型与Java数据类型对应关系
| Java数据类型 | 数据库数据类型 |
|---|---|
| int、long | INT、BIGINT |
| String | CHAR、VARCHAR |
| java.sql.Date、java.sql.Time、java.sql.Timestamp | DATE、TIME、DATETIME |
| float、double | FLOAT、DOUBLE、DECIMAL |
5. 查询代码
import java.sql.*;
public class AppDemo1 {public static void main(String[] args) throws SQLException {//获取连接对象,Connection是一个接口,返回的是它的实现类,这是一种多态。实现类由MySQL驱动提供。Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/woniu", "root", "root");//输出连接对象System.out.println("连接对象:" + connection);//创建语句对象:查询所有教学部的老师PreparedStatement prepareStatement = connection.prepareStatement("select * from teacher where depart=?");//替换占位符prepareStatement.setString(1, "教学部");//执行查询操作,返回结果集ResultSet resultSet = prepareStatement.executeQuery();//遍历结果集while (resultSet.next()) {//建议基本类型都使用包装类Integer id = resultSet.getInt("id");String name = resultSet.getString("name");Date birthday = resultSet.getDate("birthday");String depart = resultSet.getString("depart");Double salary = resultSet.getDouble("salary");System.out.println("编号:" + id + "\t姓名:" + name + "\t生日:" + birthday + "\t部门:" + depart + "\t工资:" + salary);}//关闭连接对象:先开的后关resultSet.close();prepareStatement.close();connection.close();}
}
总结
1.介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接;
2.阐述了JDBC的编程思想,介绍了各个API接口的分工;
3.对于JDBC相关的类进行详细的分析;
相关文章:
MySQL进阶(再论JDBC)——JDBC编程思想的分析 JDBC的规范架构 JDBC相关的类分析
前言 SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言,可以用于多种关系型数据库管理系统(RDBMS),如MySQ…...
rabbitMQ的知识点
RabbitMQ是一种消息队列软件,它实现了高度可靠的消息传递机制。RabbitMQ支持多种消息协议,包括AMQP、STOMP、MQTT等,比较灵活。以下是一些rabbitmq的知识点: 1. 消息队列:消息队列是一种分布式系统中广泛使用的通信模…...
EtherNet/IP 库卡机器人和EtherCAT倍福PLC总线协议连接案例
EtherNet/IP 是一种适合于工业环境和对时间要求比较苛刻的应用的网络。而远创智控YC-EIPM-ECT通讯网关,是一款自主研发的EtherNet/IP 从站功能的通讯网关。它不仅可以实现EtherNet/IP 和EtherCAT的无缝连接,还可以将EtherNet/IP 作为从站连接到EtherCAT总…...
微信小程序 uniapp+vue线上洗衣店业务管理系统演89iu2
本课题意在设计一种系统的、基于用户体验的线上洗衣服务模式,具有如下的研究意义: (1)为用户提供更简单、便捷的洗衣服务模式; (2)为智能柜的盈利模式提供了新的方向; (3)通过线上系统、智能柜与洗衣工厂结合的方式,为洗衣企业构建了一套节 省人力成本的…...
Maven项目,进行编译,使用idea的 编译功能,就是正常的,但是在终端中执行 mvn clean compile 报错
一、背景: Maven项目,进行编译,使用idea的 编译功能,就是正常的,但是在终端中执行 mvn clean compile 报错 报错信息: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin…...
mssql还原数据库失败
标题: Microsoft SQL Server Management Studio ------------------------------ 服务器 "192.168.31.132" 的 附加数据库 失败。 (Microsoft.SqlServer.Smo) 有关帮助信息,请单击: https://go.microsoft.com/fwlink?ProdNameMicrosoftSQLServer&…...
Linux多线程编程- 无名信号量
简介 无名信号量(在 POSIX 环境下通常指 sem_t 类型的信号量)是用于同步和互斥的原语,它允许线程和进程按照预期的顺序执行,并确保对共享资源的安全访问。无名信号量与命名信号量的主要区别在于它们的可见性和生命周期。无名信号…...
【网络协议】聊聊DHCP和PXE 工作原理
DHCP 动态主机配置协议 对于每个主机来说,只要连接了网络,那么就会配置一个IP地址,那么这个IP地址,如果是手动配置的话,对于公司内部的人员来说都要找IT进行配置,这个太浪费人力物力了,所以解决…...
发现国内优秀的团队协作软件,帮助提高工作效率
中国有许多优秀的团队协作软件,它们在企业和组织中发挥着重要作用。 以下是一些最受欢迎的团队协作软件: 1、钉钉(DingTalk): 这是一款由阿里巴巴推出的企业级协作工具,旨在帮助企业和组织实现高效沟通和协作。钉钉提…...
LeetCode 面试题 08.12. 八皇后
文章目录 一、题目二、C# 题解 一、题目 设计一种算法,打印 N 皇后在 N N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。 注意&#…...
Excel 的下拉列表
可以将 Sheet6 隐藏,就更好地隐藏了来源。...
基于Effect的组件设计 | 京东云技术团队
Effect的概念起源 从输入输出的角度理解Effect https://link.excalidraw.com/p/readonly/KXAy7d2DlnkM8X1yps6L 编程中的Effect起源于函数式编程中纯函数的概念 纯函数是指在相同的输入下,总是产生相同的输出,并且没有任何副作用(side effect)的函数。…...
541. 反转字符串 II
541. 反转字符串 II class Solution { public:void Reverse(string& s, int start, int end){end--;while (start < end){swap(s[start], s[end]);start;end--;}}string reverseStr(string s, int k){int len s.size();for (int i 0; i < len; i 2 * k){if (i …...
基本分段存储管理方式(分段,段表,地址转换以及与分页管理对比)
1.分段 1.进程的地址空间: 按照程序自身的逻辑关系划分为若干个段,每个段都有一个段名 (在低级语言中,程序员使用段名来编程),每段从0开始编址. 2.内存分配规则: 以段为单位进行分配,每个段在内存中占据…...
哪个牌子的洗地机好用?2023洗地机推荐
洗地机作为一款高效的清洁家电能轻松的搞定各种干湿垃圾,满足日常生活中的各种地面清洁需求,越来越受大众的青睐,那么我们如何快速的选择一款适合自己无线洗地机呢?一起来看看! 做推荐之前,先给大家科普选购洗地机的时候应该关注…...
根据脑图谱获取感兴趣区域的mask
根据脑图谱获取感兴趣区域的mask 1,引入1.1 ASPECT-Atlas 2,获取脑图谱感兴趣区域mask参考: 1,引入 脑影像分析中,我们常常会针对性的对某些感兴趣区域进行分析,而对它们进行分析的前提是获取该区域的mask…...
Android Framework通信:Handler
文章目录 前言一、Handler源码分析1、创建Handler2、发送消息3、取消息4、消息处理5、线程切换的方法(Handler异步消息处理机制流程)handler.sendMessage()handler.post()View.post()Activity中的runOnUiThread() 二、Handler高频面试题1、为什么要有Han…...
Redis的安装和配置
一、Redis的安装 使用命令将redis安装到linux服务器 yum -y install redis配置redis配置文件 redis的配置文件默认路径为/etc/redis.conf,对配置文件进行修改。 (1)注释掉bind 127.0.0.1; bind配置项设置的是redis允许的ip地址访问…...
Java武侠文字游戏
import java.util.Random;public class Role {//姓名private String name;//血量private int blood;//性别private char gender;//长相(随机)private String face;String[] boyfaces {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正"…...
数字化时代下,汽车行业如何突破现有营销困境?
之前三年的“口罩”时期,给全球和中国汽车市场带来不小影响,汽车销售市场整体下滑,传统营销模式很难适应现阶段汽车营销需求,那么在当下,汽车行业应该如何突破现有营销困境呢?接下来就由媒介盒子跟大家聊聊…...
告别硬编码!用LVGL Keyboard控件5分钟搞定嵌入式设备的输入法界面
嵌入式UI革命:5分钟用LVGL Keyboard控件打造专业输入界面 在智能家居控制面板上输入Wi-Fi密码时,你是否厌倦了反复调试按钮坐标?为工业HMI设备设计参数输入界面时,是否受够了每次修改布局都要重写事件处理逻辑?传统嵌入…...
JiYuTrainer终极指南:三步解锁极域电子教室,恢复学习自由
JiYuTrainer终极指南:三步解锁极域电子教室,恢复学习自由 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学时代,极域电子教室为学生…...
Reddit内容获取引擎:从API调用到自动化管道的实战指南
1. 项目概述与核心价值 最近在折腾一个挺有意思的小玩意儿,叫 Cat-tj/reddit-reader 。乍一看名字,你可能觉得这又是一个简单的Reddit爬虫或者内容聚合器。但如果你深入了解一下,会发现它远不止于此。这个项目本质上是一个高度定制化、可编…...
把旧路由器改造成远程ADB调试服务器:OpenWrt安装adb与公网访问指南
旧路由器变身远程ADB调试服务器:OpenWrt实战指南 在移动应用开发过程中,频繁连接USB数据线进行调试不仅效率低下,更限制了开发者的工作灵活性。想象一下,当你需要同时调试多台设备,或者在不同网络环境下快速切换测试场…...
aitextgen与GPT-2-simple对比:为什么aitextgen是更好的选择
aitextgen与GPT-2-simple对比:为什么aitextgen是更好的选择 【免费下载链接】aitextgen A robust Python tool for text-based AI training and generation using GPT-2. 项目地址: https://gitcode.com/gh_mirrors/ai/aitextgen aitextgen是一个强大的Pytho…...
Glass Browser:透明悬浮浏览器,解锁Windows多任务处理新维度
Glass Browser:透明悬浮浏览器,解锁Windows多任务处理新维度 【免费下载链接】glass-browser A floating, always-on-top, transparent browser for Windows. 项目地址: https://gitcode.com/gh_mirrors/gl/glass-browser 当你在编写代码时需要查…...
年终述职的“数据思维”:用指标和案例讲好你的技术故事
测试人的述职困境又到年终,述职报告像一场无法回避的考试。对于软件测试从业者而言,这往往比定位一个偶发崩溃的缺陷更难——我们习惯了与代码、用例、缺陷打交道,却常常在总结自己一年的价值时陷入沉默。“保障了产品质量”“完成了测试任务…...
CloudBase-MCP:基于MCP协议桥接本地应用与云服务的实践指南
1. 项目概述:一个连接云与本地应用的“智能接线员”如果你正在开发一个应用,需要让它在本地服务器上运行,同时又想无缝地调用云上的各种能力——比如对象存储、数据库、AI模型或者消息队列,你会怎么做?传统的方式可能是…...
无感定位技术白皮书——ReID跨镜靠特征接力,原生时空轨迹实现无短板碾压
无感定位技术白皮书——ReID跨镜靠特征接力,原生时空轨迹实现无短板碾压前言在智慧安防、智慧园区、工业物联网等数字化转型核心场景中,跨摄像头目标追踪与精准定位是支撑场景智能化升级的关键底座。长期以来,ReID(行人重识别&…...
ARM ETMv4跟踪寄存器架构与调试实践
1. ARM ETMv4 跟踪寄存器架构概述ARM嵌入式跟踪宏单元(ETM)是处理器调试架构中的关键组件,ETMv4作为其第四代架构,提供了更强大的指令和数据跟踪能力。与传统的断点调试不同,ETM采用实时跟踪技术,能够在不中断处理器运行的情况下&…...
