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

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...