一文速通Java的JDBC编程
目录
🐽JDBC的引入
什么是API
JDBC的概念及作用
🍇准备工作
数据库驱动包
下载第三方库
🐾JDBC 使用
将jar包导入项目
通过代码使用JDBC的API
(1)创建数据源对象并设置属性
(2)和数据库服务器建立网络连接
(3)程序构造SQL语句
(4)把SQL发送到服务器上进行执行
update、insert、delete语句
select语句
(5)释放资源
🐽JDBC的引入
针对数据库的操作,SQL实际上工作中,很少会直接通过命令行/图形化客户端来操作数据库,更多的是,通过代码(C++,Java,Python,Go…)操作数据库。但我们前面学到的SQL语句都不会白学哈,即使是通过代码操作数据库,仍然会用到SQL。
什么是API
🌈对于JDBC的引入首先要知道什么是API
Application Programming Interface应用程序编程接口
咱们写代码,一般不是从0开始写的,会调用一些别人写好的代码,别人写好的代码,就称为"库",这些代码里提供的一些类/方法/函数就可以称为API了.
学JavaSE/数据结构的时候,其实也接触到过,我们会用到不少Java标准库提供的API
String、List、Random、Scanner......还有一个专门的Java API文档
通过代码操作数据库的前提就是,数据库首先要提供一组API供其他的程序来调用
问题来了,数据库,有很多种Oracle,Mysql,SQL Server.......这些数据库,提供的API是一样的吗?要看类的名字里面的方法方法的作用是否一样。当然是不一样的,因为这些数据库分别是不同的公司不同的程序员研究出来的。既然这样,每个数据库提供的API都是自成一套体系,程序员在一旦切换数据库后,岂不是要学习一套新的API的使用吗?在谁都不服谁时,江湖大哥Java自身制定了一套API标准,各种数据库都要把自己的API转换成和Java这一套兼容的API。这一套标准的API我们就称为JDBC。
JDBC的概念及作用
JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问。
在Java JDBC编程中对数据库的操作均使用JDK自带的API统一处理,通常与特定数据库的驱动类是完全解耦的。所以掌握Java JDBC API (位于 java.sql 包下) 即可掌握Java数据库编程。
🍇准备工作
数据库驱动包
不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的,要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。
下载第三方库
MySQL本身的API是C语言的API,就需要把原生C的API转换成兼容JDBC的Java的API。MySQL官方提供了一个mysql-connector-java驱动包,就可以完成上述转换。mysql-connector-java不是mysql自带,也不是java自带的。需要通过第三方的途径,把这个东西下载下来并且导入到自己的项目中。
下载一个第三方库主要有三种途径:
1)去官方网站 Oracle官网
2)去github
3)去maven中央仓库
前两种都比较麻烦,第三种方便快速,类似于手机APP应用商店
这里给出链接来教大家怎么下载🔗🔗🔗,验证需要时间请耐心等待哦💞💞💞
mysql 5.7 经典版就行了,mysql 8 经典版 最新版都可以,我这里下载的是MySQL版本是5.7,所以我选择下面的经典版,点击大黑粗体进去即可
如果mysql服务器是8系列connector也必须使用8版本,如果mysql服务器是5系列connector也必须使用5版本,一点要保证版本的匹配,查看自己下载的MySQL是哪个版本就不用我教了吧。🙈🙈
点击jar就会触发下载
🐾JDBC 使用
将jar包导入项目
☔️首先解释下什么是jar包
java中第三方库通常是以jar后缀的文件来提供的,称为jar包,本质上就是一个类似于.rar这样的压缩包,只不过这里放的内容是java的一些.class文件
java代码是java文件通过javac编译之后,每个java就会得到一个.class二进制字节码文件,
一个程序,可能会有很多类,会有很多.class文件,为了方便,于是就可以把这些.class打成压缩包也就是jar。
现在我们来学习怎么把jar包导入到自己的项目中去,至于用idea怎么创建一个项目我就不教了
1️⃣先在项目中创建一个目录,名字随便起,但是不要带有中文/特殊字符
我之所以起为lib,那是因为lib即library意思是库,即别人写好的代码咱们可以直接拿过来使用。
2️⃣把下载好的jar包拷贝到lib目录中
简单的复制粘贴哦
3️⃣右键刚才的lib目录,选择add as library告诉idea这个lib目录是一个“库”目录
添加完"库"之后,此时idea就能自动分析出jar包里都有啥
注意:上述导包的方式是适用于初学者的简单粗暴的方式,实际开发中,一般不会这么搞,有更好的办法。
通过代码使用JDBC的API
(1)创建数据源对象并设置属性
下面要设置的三个属性都是子类具有的,DataSource本身没有相关的方法和属性
DataSource dataSource=new MysqlDataSource();
DataSource是Java标准库JDBC自带的接口,而MysqlDataSource则来自于咱们刚才手动导入的jar包。像如果有一天要操作Oracle就要newOracle数据库提供的具体的对象。
设置三种属性
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource) dataSource).setUrl();
((MysqlDataSource) dataSource).setUser();
((MysqlDataSource) dataSource).setPassword();
第一行代码用到了向上转型,但是为了设置属性又用到了向下转型。有人说这不就画蛇添足了吗?
其实创建数据源还有一种方式
MysqlDataSource dataSource=new MysqlDataSource();
dataSource.setUrl();
dataSource.setUser();
dataSource.setPassword();
那为什么有人就是要用第一种呢?🧐🧐🧐
按照第一种写法,后续代码中如果再使用DataSource这个东西,是看不到"MysqlDataSource"这个信息的,就使得后续的其他部分代码和"mysql"这个概念解耦合了,后面的代码,和啥数据库没关系。如果要更换数据库,此时代码修改的成本就比较低。
实则,实际开发中,"更换数据库"这种事情,本身就属于是非常低频的操作,而且如果真的更换数据库,往往要做很多方面的考量和调整,绝对不是,修改3-4行代码就能轻易完成的,
而且,第一种的代码,其实也付出了代价,为了降低耦合,写了一堆转型,对于代码的可读性是有负面作用的。
总的说来上面两种方式都是可以的,看个人的喜好吧👻👻👻
🔦属性一:数据库服务器在哪里
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/java112characterEncoding=utf8&useSSL=false");
这一串东西不用背,写代码的时候直接复制粘贴即可,我们来了解一下每一部分的内容。😘😘😘
描述了url的用途是给jdbc的mysql来使用的
IP地址.描述了mysql服务器所在的主机的位置,mysql是客户端服务器结构的程序客户端和服务器之间是通过网络来通信的,此时就通过IP地址这样的概念来描述mysql服务器是在哪个主机上。127.0.0.1这个IP是一个特殊的地址表示"你本机",因为咱们JDBC的代码和mysql服务器都是在同一个机器上,此时IP地址就都固定写成127.0.0.1即可。如果是在不同主机上,再写别的地址。
端口号,用来区分一个主机上的应用程序的,比如,我自己这个机器上,就有好多应用程序在使用网络,比如,浏览器,qq音乐,mysql服务器.…后续发来一个网络的数据,是要交给哪个程序来处理呢?就需要通过端口号来区分了。mysql安装时,默认端口号3306(安装有个步骤可以设置端口号,如果你没有设置过就是3306)。
我数据库的名字
额外的参数起到了针对这次的数据库连接,解释说明。useSSL=false是关闭加密,有的同学,环境存在问题,开启加密无法连上数据库。
我再举个例子来让你们理解这一串长长的代码
假设我在某个餐厅盘下一个档口(18号)有同学拿着传单来这边吃饭。
1)餐厅确定位置=>IP地址
2)18号档口=>端口号
3)猪肉的熏肉大饼=>数据库名 访问的资源是哪个
通过后续的查询字符串,?后面的部分做一些补充说明 是否放辣椒/是否放葱/是否放香菜
jdbc:mysql:://陕科大六餐厅:18号/猪肉熏肉大饼?辣椒=微辣&葱=少葱&香菜=要
📽属性二:访问服务器的账户是啥
dataSource.setUser("root");
root是mysql自带的用户,管理员用户,权限是最高的
🏓属性三:访问服务器的密码是啥
dataSource.setPassword("123456");
这里写的密码和你装数据库时设置的密码要一致
(2)和数据库服务器建立网络连接
Connection connection = dataSource.getConnection();
此处的连接类似于“打通电话”的抽象连接📞📞📞,connection对象就表示了这个连接,导包的时候别导错了,导入的是第一个
连接建立成功🎉🎉🎉
注意:连接失败可能是上述设置属性信息时的错误,控制台都会显示异常信息。访问的数据库的IP/端口号/数据库名/相关参数/用户名密码都有可能出错。
在这给大家演示一下🤪🤪🤪
密码错误时
数据库名错误
端口号错误
(3)程序构造SQL语句
构造方式有很多种,这里就介绍一种最主流的基于PreparedStatement这个类的。
PreparedStatement为预编译的语句。正常来说,在cmd敲的sql,是把sql发送到mysql服务器mysq服务器负责解析,解析完成之后,执行。解析检查sql是否有语法错误,具体要完成什么工作。由于mysql服务器,同一时刻可能要同时给多个客户端提供服务,解析工作积少成多,也就会比较消耗资源。因此往往就可以把解析工作,放到客户端来完成(自己写的代码),客户端发送sql之前,先解析好,先把一些能做的工作做好,这样服务器就可以降低一些工作量,减轻压力了。
String sql = "insert into student values(1,'张三')";
PreparedStatement statement = connection.prepareStatement(sql);
Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象
实际开发中最常用的是PreparedStatement对象,以下对其的总结:
(4)把SQL发送到服务器上进行执行
为了更好的观察我们在MySQL客户端先创建好一个表并插入一条信息
update、insert、delete语句
executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete语句。
int n = statement.executeUpdate();
System.out.println(n);
这里的执行是真正和数据库服务器进行网络通信,执行完之后就有了两条张三的信息了
插入数据时能不能由用户自己指定插入的内容呢
Scanner sc = new Scanner(System.in);
System.out.println("请输入id:");
int id = sc.nextInt();
System.out.println("请输入name:");
String name = sc.next();String sql = "insert into student values(" + id + ", '" + name + "')";
PreparedStatement statement = connection.prepareStatement(sql);
这样拼字符串,不太好
1.代码看起来比较乱.容易写错
2.可能会引起"sql"注入攻击,比如有人输入的时候不好好输入,故意使坏,就可能使执行sql的时候,产生一定的"负面影响”
String sql = "insert into student values(? ,?)";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, id);
statement.setString(2, name);
使用“?”先占个位置后续再替换掉类似于C的printf的%d一样
删除也是一样的
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;public class Main {public static void main(String[] args) throws SQLException {Scanner sc = new Scanner(System.in);System.out.println("请输入id:");int id = sc.nextInt();
// System.out.println("请输入name:");
// String name = sc.next();MysqlDataSource dataSource = new MysqlDataSource();dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");dataSource.setUser("root");dataSource.setPassword("123456");Connection connection = dataSource.getConnection();String sql = "delete from student where id = ?";PreparedStatement statement = connection.prepareStatement(sql);statement.setInt(1, id);int n = statement.executeUpdate();System.out.println(n);statement.close();connection.close();}
}
select语句
executeQuery() 方法执行后返回单个结果集的集合,通常用于select语句
select操作,和上述操作相比,有所差异,多了一个步骤,"遍历结果集合"。
先往表中插入两行
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class Main {public static void main(String[] args) throws SQLException {MysqlDataSource dataSource = new MysqlDataSource();dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/java112?characterEncoding=utf8&useSSL=false");dataSource.setUser("root");dataSource.setPassword("123456");Connection connection = dataSource.getConnection();String sql = "select * from student";PreparedStatement statement = connection.prepareStatement(sql);ResultSet resultSet = statement.executeQuery();while (resultSet.next()) {System.out.print(resultSet.getInt("id") + " ");System.out.println(resultSet.getString("name"));}resultSet.close();statement.close();connection.close();}
}
ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供了对这些行中数据的访问。
ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next()方法 ,类似于迭代器操作,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。
(5)释放资源
释放资源的顺序要和创建资源的顺序相反。建立连接/创建语句的时候就需要消耗一定的内存/硬盘/网络等资源这些资源,都是跟随这个连接来走的.如果连接不再使用了,就需要把这些资源释放掉.
🥘如果执行的是update、insert、delete语句
statement.close();
connection.close();
🍛如果执行的是select语句
resultSet.close();
statement.close();
connection.close();
JDBC实际开发中,一般不会直接使用,这个东西的代码,写起来比较麻烦,后来就有了很多的库和框架,来针对JDBC进行封装和简化(都是基于JDBC),后续学习MyBaits框架,就属于是针对JDBC简化后的组件。所谓的框架,说到底,都是别人,针对一些"通用场景"开发出来的程序组件。未来实际开发中,很可能会遇到一些"特定场景”,此时,通用的框架,可能就会失效就需要咱们有能力对已有框架进行魔改,魔改成能适应特定场景/或者能自己造出适合的框架…...
相关文章:
![](https://i-blog.csdnimg.cn/direct/1956c2fa302f4152af671d3f0c9dc3ee.png)
一文速通Java的JDBC编程
目录 🐽JDBC的引入 什么是API JDBC的概念及作用 🍇准备工作 数据库驱动包 下载第三方库 🐾JDBC 使用 将jar包导入项目 通过代码使用JDBC的API (1)创建数据源对象并设置属性 (2)和数据库服务器建立网络连接 (3)程序构造SQL语句 (…...
![](https://www.ngui.cc/images/no-images.jpg)
laravel中请求失败重试的扩展--Guzzle
背景 开发过程中,跟外部接口对接时,很常见的要考虑到失败重新的情况,这里记录一下我用的失败重试的情况, 重试方法 1、使用 Laravel 的 HTTP 客户端和异常处理 结合异常处理和重试逻辑 use Illuminate\Support\Facades\Http;…...
![](https://i-blog.csdnimg.cn/direct/6b03ef239a104ef3be945b8786fe94c1.png#pic_center)
如何在vue中渲染markdown内容?
文章目录 引言什么是 markdown-it?安装 markdown-it基本用法样式失效?解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中,Markdown 作为一种轻量级的标记语言,广泛用于文档编写、内容管理以及富文本编辑器中。markdown…...
![](https://i-blog.csdnimg.cn/direct/f2595344c28847babd75b1deb06246dc.png)
Mysql MVCC
MVCC 什么是MVCC MVCC(多版本并发控制,Multi-Version Concurrency Control) 是一种用于数据库管理系统(DBMS)中的并发控制机制,它允许多个事务同时执行而不互相阻塞,并通过创建数据的多个版本…...
![](https://i-blog.csdnimg.cn/direct/d54548c789fb4677bbd9727cc6c10923.png)
Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端
文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理(1)为RestClient(2)为WebClient(3)为RestTemplate 注意 一、概述 官方文档…...
![](https://i-blog.csdnimg.cn/img_convert/75b4b37a142d81879af10cc8a08ef0a7.png)
springboot医院信管系统
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fwww.eechina.com%2Fdata%2Fattachment%2Fforum%2F202501%2F17%2F150606kto6y6z333m3wxt4.jpg&pos_id=y9DphToa)
迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写内核 LED HDF 驱动程序
接下来编译 LED 驱动,该驱动用于在基于华为设备框架(HDF)的系统中控制 LED 灯的开关,完整代码如下所示: 更多内容可以关注:迅为RK3568开发板篇OpenHarmony...
![](https://i-blog.csdnimg.cn/direct/d72dd084cd9e49fda2a0a6197234a6ca.png)
[javaWeb]初识Web
将该图片在浏览器中打印出来 代码: <html> <head> <title>HTML初识</title> </head> <body> <h1>猫猫</h1> <img src "img/1.jpg"> </body> &l…...
![](https://i-blog.csdnimg.cn/direct/4dc2f4edbab54ac19f92a86a37c19c2f.png)
复健第二天之[MoeCTF 2022]baby_file
打开题目在线环境可以看到: 感觉要用伪协议去求,但是我们并不知道flag的位置,这里我选择用dirsearch去扫一下: 最像的应该就是flag.php了 于是就构建payload: **?filephp://filter/convert.base64-encode/resource…...
![](https://i-blog.csdnimg.cn/direct/92d83b23ebd845e0b2770d55d5282a98.png)
uniapp 微信小程序 editor 富文本编辑器
<view class"inp boxsizing"><view class"contentBox"><!-- 富文本编辑器 --><view classwrapper><view classtoolbar tap"format"><view :class"formats.bold ? ql-active : " class"iconfon…...
![](https://i-blog.csdnimg.cn/direct/8754f39694934798becbb38459ea7e19.png#pic_center)
SparkSQL函数
文章目录 1. SparkSQL函数概述2. SparkSQL内置函数2.1 常用内置函数分类2.2 常用数组函数2.2.1 array()函数1. 定义2. 语法3. 示例 2.3 常用日期与时间戳函数2.4 常见聚合函数2.5 常见窗口函数 3. SparkSQL自定义函数3.1 自定义函数分类3.2 自定义函数案例演示 1. SparkSQL函数…...
![](https://i-blog.csdnimg.cn/direct/cb0fe06019aa45609da3f63c00ca1c5d.png)
从零开始学数据库 day2 DML
从零开始学数据库:DML操作详解 在今天的数字化时代,数据库的使用已经成为了各行各业的必备技能。无论你是想开发一个简单的应用,还是想要管理复杂的数据,掌握数据库的基本操作都是至关重要的。在这篇博客中,我们将专注…...
![](https://i-blog.csdnimg.cn/direct/97f005a8c55a4081ae54ab314caca6de.jpeg)
电脑换固态硬盘
参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…...
![](https://i-blog.csdnimg.cn/direct/e14c4ceb0a6d439dad90ddec5e99efc2.png#pic_center)
【大数据】机器学习------支持向量机(SVM)
支持向量机的基本概念和数学公式: 1. 线性可分的支持向量机 对于线性可分的数据集 ,其中(x_i \in R^d) 是特征向量 是类别标签,目标是找到一个超平面 ,使得对于所有 的样本 ,对于所有(y_i -1) 的样本,…...
![](https://i-blog.csdnimg.cn/direct/873d2402793d468bb17e3663a75a5ec5.png#pic_center)
Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅
引言:音浪太强,我稳如老 HAL! 如果有一天你的耳机里传来的不是《咱们屯里人》,而是金属碰撞般的杂音,那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果!在 Android 音频架构中,…...
![](https://i-blog.csdnimg.cn/direct/f26d9cedd52a465aba35b2b009197e16.png)
Golang Gin系列-2:搭建Gin 框架环境
开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中,我们将引导你完成安装Go编程语言和Gin框架的过程,Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中,本指南是高效而强大的web开发路线图。 安装…...
![](https://www.ngui.cc/images/no-images.jpg)
FGC_grasp复现
复现FGC_grasp 环境配置数据集准备RuntimeError: CUDA error: invalid device ordinal 问题的解决方案raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file问题的解决方案加载数据集时总是被kill然后服务器也卡住了动不了问题的…...
![](https://i-blog.csdnimg.cn/img_convert/92041ff254b9665ae09f5db4abd631c3.jpeg)
实力认证 | 海云安入选《信创安全产品及服务购买决策参考》
近日,国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》,报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…...
![](https://i-blog.csdnimg.cn/img_convert/4683c0c9624ac27ced534c3462dafc49.png)
Avalonia系列文章之小试牛刀
最近有朋友反馈,能否分享一下Avalonia相关的文章,于是就抽空学习了一下,发现Avalonia真的是一款非常不错的UI框架,值得花时间认真学习一下,于是边学习边记录,整理成文,分享给大家,希…...
![](https://i-blog.csdnimg.cn/direct/2efea1b2e72244448a3d24e46522e01d.jpeg#pic_center)
中国数字安全产业年度报告(2024)
数字安全是指,在全球数字化背景下,合理控制个人、组织、国家在各种活动中面临的数字风险,保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…...
![](https://i-blog.csdnimg.cn/img_convert/92469ba8679ae6a032fee6ccb8b4ec12.png)
LabVIEW桥接传感器配置与数据采集
该LabVIEW程序主要用于配置桥接传感器并进行数据采集,涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI("Auto Cleanup")用于自动清理资源,建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…...
![](https://www.ngui.cc/images/no-images.jpg)
简明docker快速入门并实践方法
简明docker快速入门并实践方法 前言:1. 什么是Docker?2. Docker的基本概念3. 安装配置Docker4. Docker基本命令:5. 简单实践:拉取Nginx镜像-自定义配置-推送镜像步骤 1:拉取Nginx镜像步骤 1.5(可选…...
![](https://i-blog.csdnimg.cn/direct/fc35bfc3307b42479f1605c020a6239c.png)
《MambaIR:一种基于状态空间模型的简单图像修复基线方法》学习笔记
paper:2402.15648 目录 摘要 一、引言 1、模型性能的提升依赖于网络感受野的扩大: 2、全局感受野和高效计算之间存在固有矛盾: 3、改进版 Mamba的巨大潜力 4、Mamba 在图像修复任务中仍面临以下挑战: 5、方法 6、主要贡献…...
![](https://i-blog.csdnimg.cn/direct/6352602593724d1ebc20a9deb43146cc.jpeg)
链式前向星的写法
【图论02】动画说图的三种保存方式 降低理解门槛 邻接表 链式前向星 邻接矩阵_哔哩哔哩_bilibili 杭电ACM刘老师-算法入门培训-第12讲-拓扑排序及链式前向星_哔哩哔哩_bilibili 图论003链式前向星_哔哩哔哩_bilibili(链式前向星的遍历) head数组的下标…...
![](https://img-blog.csdnimg.cn/cc002cbd5c414c5393e19c5e0a0dbf20.gif#pic_center#pic_center)
【逆境中绽放:万字回顾2024我在挑战中突破自我】
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 一、引言二、个人成长与盘点情感与心理成长学习与技能提升其它荣誉 三、年度创作历程回顾创作内容概…...
![](https://www.ngui.cc/images/no-images.jpg)
尺取法(算法优化技巧)
问题和序列的区间有关,且需要操作两个变量,可以用两个下标(指针)i 和 j 扫描区间。 1,反向扫描,i 从头,j 从尾,在中间相遇。 例1.1(P37) 找指定和的整数对…...
![](https://www.ngui.cc/images/no-images.jpg)
基于 K-Means 聚类分析实现人脸照片的快速分类
注:本文在创作过程中得到了 ChatGPT、DeepSeek、Kimi 的智能辅助支持,由作者本人完成最终审阅。 在 “视频是不能 P 的” 系列文章中,博主曾先后分享过人脸检测、人脸识别等相关主题的内容。今天,博主想和大家讨论的是人脸分类问题。你是否曾在人群中认错人,或是盯着熟人的…...
![](https://i-blog.csdnimg.cn/direct/01d83612a78f4496abce05d9199c1d86.png)
【漏洞预警】FortiOS 和 FortiProxy 身份认证绕过漏洞(CVE-2024-55591)
文章目录 一、产品简介二、漏洞描述三、影响版本四、漏洞检测方法五、解决方案 一、产品简介 FortiOS是Fortinet公司核心的网络安全操作系统,广泛应用于FortiGate下一代防火墙,为用户提供防火墙、VPN、入侵防御、应用控制等多种安全功能。 FortiProxy则…...
![](https://static.oschina.net/uploads/img/202501/17230006_PqyC.png)
7.5.4 MVCC优化测试
作者: h5n1 原文来源: https://tidb.net/blog/4e02d900 1. 背景 由于MVCC 版本数量过多导致rocksdb扫描key数量过多影响SQL执行时间是tidb经常出现问的问题,tidb也一直在致力于优化该问题。 一些优化方式包括比: (1) 从传统…...
![](https://i-blog.csdnimg.cn/direct/1abf2a7cbaeb4bd0a014c2919065a096.png)
STM32 FreeRTOS 事件标志组
目录 事件标志组简介 基本概念 1、事件位(事件标志) 2、事件组 事件组和事件位数据类型 事件标志组和信号量的区别 事件标志组相关API函数介绍 事件标志组简介 基本概念 当在嵌入式系统中运行多个任务时,这些任务可能需要相互通信&am…...
沈阳网站建设费用/制作网页教程
SLIC与目前最优超像素算法的比较 Radhakrishna Achanta, Appu Shaji, Kevin Smith, Aurelien Lucchi, Pascal Fua, and Sabine Susstrunk 摘要 近年来,计算机视觉应用越来越依赖超像素,但并不总是清楚什么是良好的超像素算法。为了解现有方法的优点和…...
![](http://upload-images.jianshu.io/upload_images/7849276-5f48f1430e958383.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
成都网站开发建设推广/专业推广引流团队
转载请注明原创出处,谢谢! 经过 4 次跳票,历经曲折的 Java 9 正式版终于发布了!今天看着到处都是jdk9发布了,新特性说明,心想这么好的蹭热度计划能错过嘛,哈哈,所以就发了这篇文章。…...
![](/images/no-images.jpg)
广东网站建设服务商/托管竞价推广公司
这是最简单的linux下postfix 安装步骤首先下载postfix源代码包:wget http://www.postfix.cn/source/official/postfix-2.6.5.tar.gztar vxfz postfix-2.6.5.tar.gzcd postfix-2.6.5useradd postfix -M -s /sbin/nologingroupadd postdropmakemake install一路enter直…...
![](https://img-blog.csdnimg.cn/2021010820503549.png)
网站主编 做啥/百度关键词优化大师
1.Bean的作用域 当Spring IOC容器创建Bean实例的时候,可以为Bean指定作用域,包括singleton(单例模式,默认选项,他表示所标注的实体类在整个项目中只有一个)、prototype(原型模式,每次获取都会新生成一个)、request(Ht…...
![](https://img-blog.csdnimg.cn/20190110112625509.png)
网站建设总流程/网络营销技巧培训班
随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。 在网上看到一篇多渠道打包APK的,思路是没问题的,原文地址:http://www.cnblogs.com/yyyyy5101/ar…...
![](https://www.oschina.net/img/hot3.png)
网站建设 新闻/seo的定义
2019独角兽企业重金招聘Python工程师标准>>> 1、一致性原则:适用于各种设计场景,比如系统架构设计中操作系统、软件版本都要一致,便于管理便于自动化部署,试想一下,假如你们公司用了各种操作系统、各种服务…...