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

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)]

本系列文章合集如下:

【合集】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

在这里插入图片描述

编写流程

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

JDBC规范架构

在这里插入图片描述

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

在这里插入图片描述

API分工

在这里插入图片描述

在这里插入图片描述

JDBC类的分析

DriverMananger类

1. 作用

  1. 加载并且注册数据库驱动
  2. 获取连接对象

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接口的实现类由数据库驱动提供

注:所有的参数使用占位符,为什么使用占位符:

  1. 可以避免SQL注入的风险
  2. 占位符是可变的,查询语句更加灵活。

PreparedStatement接口

1. Statement和PreparedStatement

获取访问数据库的语句对象:

  1. Statement:父接口,有SQL注入的安全问题,在后期很少使用。
  2. 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、longINT、BIGINT
StringCHAR、VARCHAR
java.sql.Date、java.sql.Time、java.sql.TimestampDATE、TIME、DATETIME
float、doubleFLOAT、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.进程的地址空间: 按照程序自身的逻辑关系划分为若干个段&#xff0c;每个段都有一个段名 &#xff08;在低级语言中&#xff0c;程序员使用段名来编程&#xff09;&#xff0c;每段从0开始编址. 2.内存分配规则: 以段为单位进行分配&#xff0c;每个段在内存中占据…...

哪个牌子的洗地机好用?2023洗地机推荐

洗地机作为一款高效的清洁家电能轻松的搞定各种干湿垃圾&#xff0c;满足日常生活中的各种地面清洁需求&#xff0c;越来越受大众的青睐&#xff0c;那么我们如何快速的选择一款适合自己无线洗地机呢?一起来看看! 做推荐之前&#xff0c;先给大家科普选购洗地机的时候应该关注…...

根据脑图谱获取感兴趣区域的mask

根据脑图谱获取感兴趣区域的mask 1&#xff0c;引入1.1 ASPECT-Atlas 2&#xff0c;获取脑图谱感兴趣区域mask参考&#xff1a; 1&#xff0c;引入 脑影像分析中&#xff0c;我们常常会针对性的对某些感兴趣区域进行分析&#xff0c;而对它们进行分析的前提是获取该区域的mask…...

Android Framework通信:Handler

文章目录 前言一、Handler源码分析1、创建Handler2、发送消息3、取消息4、消息处理5、线程切换的方法&#xff08;Handler异步消息处理机制流程&#xff09;handler.sendMessage()handler.post()View.post()Activity中的runOnUiThread() 二、Handler高频面试题1、为什么要有Han…...

Redis的安装和配置

一、Redis的安装 使用命令将redis安装到linux服务器 yum -y install redis配置redis配置文件 redis的配置文件默认路径为/etc/redis.conf&#xff0c;对配置文件进行修改。 &#xff08;1&#xff09;注释掉bind 127.0.0.1&#xff1b; 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 {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正"…...

数字化时代下,汽车行业如何突破现有营销困境?

之前三年的“口罩”时期&#xff0c;给全球和中国汽车市场带来不小影响&#xff0c;汽车销售市场整体下滑&#xff0c;传统营销模式很难适应现阶段汽车营销需求&#xff0c;那么在当下&#xff0c;汽车行业应该如何突破现有营销困境呢&#xff1f;接下来就由媒介盒子跟大家聊聊…...

ib_insync与pandas集成:金融数据分析的完整解决方案

ib_insync与pandas集成&#xff1a;金融数据分析的完整解决方案 【免费下载链接】ib_insync Python sync/async framework for Interactive Brokers API 项目地址: https://gitcode.com/gh_mirrors/ib/ib_insync 想要在Python中高效处理Interactive Brokers的金融数据吗…...

告别手动收集!用OWASP Amass自动化你的子域名侦察(附Kali/Windows/Mac安装配置)

从手工到自动化&#xff1a;OWASP Amass在子域名侦察中的高效实践 在网络安全领域&#xff0c;信息收集的质量和效率直接影响着后续渗透测试的成败。传统的手工子域名收集方式——在多个搜索引擎间切换、查询证书透明度日志、翻阅WHOIS记录——不仅耗时耗力&#xff0c;还容易…...

解锁Stable Diffusion隐藏玩法:用ChatGPT批量生成动漫角色Prompt全攻略

从零到大师&#xff1a;ChatGPT与Stable Diffusion打造专属动漫角色的终极指南 在数字艺术创作领域&#xff0c;AI绘画工具正掀起一场前所未有的革命。想象一下&#xff0c;你脑海中那个独特的动漫角色形象&#xff0c;不再需要数月的美术训练就能实现——只需要正确的工具组合…...

别再让输入框‘抢焦点’了!手把手封装一个Vue扫码枪工具类SCAN,解决页面刷新监听丢失

从零构建高可靠Vue扫码枪工具库&#xff1a;SCAN类深度封装与工程化实践 扫码枪在零售、仓储、医疗等行业的Web系统中应用广泛&#xff0c;但传统实现强依赖输入框焦点&#xff0c;用户体验差且稳定性低。本文将带你从底层原理出发&#xff0c;完整封装一个无需输入框聚焦、支持…...

DLSS Swapper:游戏性能优化的版本管理解决方案

DLSS Swapper&#xff1a;游戏性能优化的版本管理解决方案 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 在3A游戏日益复杂的图形渲染需求下&#xff0c;玩家常常面临画质与帧率的平衡难题。NVIDIA的DLSS技术通过AI超…...

毫米波雷达信号处理入门:用MATLAB解析DCA1000采集的IWR6843原始数据(附代码)

毫米波雷达信号处理实战&#xff1a;从原始数据到距离谱的MATLAB实现 在自动驾驶和智能感知领域&#xff0c;毫米波雷达因其全天候工作能力和精确的距离测量特性&#xff0c;成为不可或缺的传感器。当开发者完成硬件配置和数据采集后&#xff0c;面对adc_data.bin这样的原始数据…...

VideoAgentTrek-ScreenFilter在CAD教学中的应用:自动筛选设计演示视频重点

VideoAgentTrek-ScreenFilter在CAD教学中的应用&#xff1a;自动筛选设计演示视频重点 每次上完CAD软件课&#xff0c;你是不是都有这样的感觉&#xff1f;老师演示了两个小时&#xff0c;鼠标点得飞快&#xff0c;步骤一个接一个。你录了屏&#xff0c;打算课后复习&#xff…...

OpenClaw超轻量方案:nanobot镜像对接QQ机器人全流程

OpenClaw超轻量方案&#xff1a;nanobot镜像对接QQ机器人全流程 1. 为什么选择nanobot镜像 去年夏天&#xff0c;我在尝试将OpenClaw接入QQ机器人时遇到了不少麻烦。当时需要分别部署模型服务、配置OpenClaw网关、调试QQ机器人接口&#xff0c;整个过程耗费了整整三天时间。直…...

Simple Comic:Mac平台的开源漫画阅读解决方案

Simple Comic&#xff1a;Mac平台的开源漫画阅读解决方案 【免费下载链接】Simple-Comic OS X comic viewer 项目地址: https://gitcode.com/gh_mirrors/si/Simple-Comic 你是否曾遇到这样的困扰&#xff1a;在Mac上尝试打开漫画文件时&#xff0c;不是格式不兼容就是阅…...

Python基础实战——批量处理文件(适合入门)

一、学习目标掌握 Python 文件操作&#xff08;读取、写入、遍历&#xff09;&#xff0c;学会批量处理指定目录下的文件&#xff0c;比如批量修改文件名、提取文件内容&#xff0c;适合刚入门 Python 的程序员巩固基础语法。二、核心知识点os 模块&#xff1a;遍历目录、修改文…...