当前位置: 首页 > 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;接下来就由媒介盒子跟大家聊聊…...

19 | 如何搞清楚事务、连接池的关系?正确配置是怎样的

事务的基本原理 在学习 Spring 的事务之前&#xff0c;你首先要了解数据库的事务原理&#xff0c;我们以 MySQL 5.7 为例&#xff0c;讲解一下数据库事务的基础知识。 我们都知道 当 MySQL 使用 InnoDB 数据库引擎的时候&#xff0c;数据库是对事务有支持的。而事务最主要的作…...

备忘录模式-撤销功能的实现

在idea写代码的过程中&#xff0c;会经常用到一个快捷键——“crtl z”,即撤销功能。“备忘录模式”则为撤销功能提供了一个设计方案。 1 备忘录模式 备忘录模式提供一种状态恢复机制。在不破坏封装的前提下&#xff0c;捕获对象内部状态并在该对象之外保存这个状态。可以在…...

C++入门(二)

文章目录 一、缺省参数1、概念2、缺省参数分类1、全缺省参数2、半缺省参数 3、特性总结 二、函数重载1、引入函数重载2、函数重载概念3、函数重载分类4、C支持函数重载的原理--名字修饰(name Mangling) 三、 引用1、引用概念2、引用特性3、 常引用4、 使用场景1、做参数2、做返…...

【软件设计师】面向对象类图的六种关系

面向对象类图的六种关系&#xff08;继承、实现、依赖、关联、聚合、组合&#xff09; 1、泛化&#xff08;继承&#xff09;2、实现3、依赖4、关联5、聚合6、组合 面向对象类图的六种关系&#xff08;继承、实现、依赖、关联、聚合、组合&#xff09; 进行面向对象设计时&…...

二十七、【四种蒙版】

文章目录 图层蒙版剪贴蒙版快速蒙版矢量蒙版 图层蒙版 在当前图层加上蒙版&#xff0c;黑色画笔的可以让当前图层消失&#xff0c;白色的画笔可以让当前图层出现&#xff1a; 无论填充什么样的颜色&#xff0c;蒙板只有黑白灰三种颜色。模板最简单应用就是我们在插入图形的时候…...

卡尔曼家族从零解剖-(00)目录最新无死角讲解

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…...

Linux系统之ip命令的基本使用

Linux系统之ip命令的基本使用 一、ip命令介绍1.1 ip命令简介1.2 ip命令的由来1.3 ip命令的安装包 二、ip命令使用帮助2.1 ip命令的help帮助信息2.2 ip命令使用帮助 三、查看网络信息3.1 显示当前网络接口信息3.2 显示网络设备运行状态3.3 显示详细设备信息3.4 查看路由表3.5 查…...

【推荐算法】ctr cvr联合建模问题合集

ctr和cvr分开建模相比ctcvr的优势&#xff1f; 在电商搜索推荐排序中&#xff0c;将ctr和cvr分开建模&#xff0c;相比直接建模ctcvr的优势是什么&#xff1f; - 萧瑟的回答 - 知乎 总结&#xff1a; 1、ctr的数据可以试试获取&#xff0c;能实时训练。但是cvr存在延迟现象&…...

安装njnx --chatGPT

gpt: 要在 Debian 11 上安装 Nginx&#xff08;通常称为 "nginx"&#xff09;&#xff0c;您可以使用 apt 包管理器执行以下步骤&#xff1a; 1. **登录到您的 Debian 11 服务器**。您可以使用 SSH 客户端以 root 或具有管理员权限的用户身份登录。 2. **更新软件…...

性能测试需求分析

1、客户方提出 客户方能提出明确的性能需求&#xff0c;说明对方很重视性能测试&#xff0c;这样的企业一般是金融、电信、银行、医疗器械等&#xff1b;他们一般对系统的性能要求非常高&#xff0c;对性能也非常了解。提出需求也比较明确。 曾经有一个银行项目&#xff0c;已经…...

建站网站怎么上传代码/百度导航最新版本下载安装

【Web API】Talend API Testerを使ってみた...

wordpress复制按钮插件/b2b平台有哪些网站

打算从今天开始学java啊&#xff0c;待会滚去找资料了。现在谈一下学习java阶段性的理解。由于现在对java真的啥也不知道啊&#xff0c;不过还是要瞎鸡儿写点自己的看法&#xff0c;以下看法应该也使适用于其它语言&#xff1a; 第一阶段&#xff0c;入门级&#xff0c;初步地总…...

taobaoke plugin for wordpress/seo精华网站

Docker Container Commit 基于容器进行 Docker Image 制作1、Docker Image 制作方式2、Docker Container Commit 命令介绍2.1 Command Help & Usage2.2 Options3、示例&#xff1a;基于运行中的镜像创建一个 Docker Image3.1 运行一个新容器&#xff0c;镜像使用 busybox3.…...

一个网站怎么做软件好用吗/bt磁力狗

环境搭建 搭建一个jQuery的开发环境非常方便&#xff0c;可以通过下列几个步骤进行。 下载jQuery文件库在jQuery的官方网站&#xff08;http://jquery.com&#xff09;中&#xff0c;下载最新版本的jQuery文件库。在网站中找到最新版本文件的下载按钮&#xff0c;将jQuery框架文…...

公众号开发网站建设合同/百度刷排名seo软件

Vue引入bootstrap主要有两种方法 方法一&#xff1a;在main.js中引入&#xff0c;此方法导入的bootstrap中对于html&#xff0c;body的一些预设置的css样式可能无效。 一、引入jQuery 在当前项目的目录下&#xff08;就是package.json&#xff09;&#xff0c;运行命令 cnpm in…...

免费做国际贸易的网站/免费网站推广优化

原理如下&#xff1a; 代码如下&#xff1a; import pandas as pd import numpy as np import matplotlib.pyplot as pltdef build_data():准备数据:return:准备好的数据data_list []with open(./test.txt) as f:#将所有的元素读成一个列表lines f.readlines()#循环对每一行元…...