sqlite3 学习笔记
文章目录
- 前言
- SQL的概念
- 与表格相关的操作
- i.创建表格(增)
- ii 删除表格(删)
- iii 更改表格(改)
- iv 查询表格(查)
- 与记录相关的操作
- i 插入记录
- ii 删除记录
- iii 查询记录
- iv 修改记录
- Linux中使用sqlite3
前言
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。
SQLite 非常适合用于嵌入式系统、物联网设备、移动应用程序和客户端应用程序,它不需要服务器,简单易用。
SQL的概念
SQLite3是一个数据库,而SQL是一种编程语言。我们需要使用SQL来操作SQLite3数据库。
SQL语言包括四种主要程序设计语言类别的语句:数据定义语言(DDL),数据查询语言(DQL),数据操作语言(DML),数据控制语言(DCL)。
SQL语言中完成核心功能的9个动词:
SQL功能 | 动词 |
---|---|
数据定义DD | Create、Drop(删除)、Alter(修改) |
数据查询DQ | Select |
数据操纵DM | Insert(插入)、Update(更新)、Delete(删除) |
数据控制DC | Grant(授权)、Revoke(撤销授权) |
SQLite3 是一个 轻量级的嵌入式数据库系统,它仅实现了 SQL 标准的一个子集。即SQLite3中只能使用部分SQL语句,而且不支持数据控制语句(DCL)。
- SQLITE3支持的 DML关键字有
- CREATE:创建一个新的表,一个表的视图,或者数据库中的其他对象
- ALTER:修改数据库中的某个已有的数据库对象,比如一个表
- DROP:删除整个表,或者表的视图,或者数据库中的其他对象
- SQLITE3支持的 DDL关键字有
- INSERT:创建一条记录
- UPDATE:修改记录
- DELETE:删除记录
- SQLITE3支持的 DQL关键字有
- SELECT:从一个或多个表中检索某些记录
与表格相关的操作
i.创建表格(增)
基本语法
CREATE TABLE IF NOT EXISTS table_name (column1_name data_type [constraints],column2_name data_type [constraints],...columnN_name data_type [constraints]
);例子
-- 创建一个名为 "users" 的表格
CREATE TABLE IF NOT EXISTS users (user_id INT PRIMARY KEY,username TEXT NOT NULL,email TEXT UNIQUE,password TEXT NOT NULL
);
CREATE TABLE
: 创建表格的关键字。IF NOT EXISTS
: 可以避免出现添加已存在数据表的SQL错误信息table_name
: 要创建的表格的名称。column_name
: 列的名称。data_type
: 数据类型,例如 INT, TEXT, REAL, BLOB 等。constraints
: 约束,例如PRIMARY KEY
,UNIQUE
,NOT NULL
,FOREIGN KEY
等。
列(字段)相关的配置
每个列(字段)都有对应的配置,如列名称,列数据类型,类约束,列默认值等。列配置的具体内容如下:
-
列的数据类型:
INT
: 整数。TEXT
: 文本字符串。REAL
: 浮点数。BLOB
: 二进制数据。专门用于存放图像、视频动画和其他类型的文件等。DATE
: 日期。DATETIME
: 日期和时间。
-
列的默认值
DEFAULT
关键字用于为表格中的列设置默认值。当插入新记录时(注意:这不是创建表时存在的默认值),如果该列的值没有被明确指定,则会自动使用默认值。
CREATE TABLE table_name ( column_name data_type DEFAULT default_value, ... );
DEFAULT
: 设置默认值的关键字。
default_value
: 默认值,可以是常量、表达式、函数等 -
列(字段)的约束:
PRIMARY KEY
: 主键,用于唯一标识每条记录。
在数据表中能够唯一识别记录的字段,都会被人们设置为主键,如“学号”字段。
当某个字段被设置为主键后,该字段中就不能再有重复值,也不能有空值,数据库管理系统将强制执行这一规则,这就是主键约束。FOREIGN KEY
: 外键,用于建立两个表格之间的关系。
-
列的索引(略读)
-
索引 (INDEX):定义索引,用于提高查询效率。除表之外,索引是大型数据库系统中最重要的对象之一!索引是一种树形结构,如果使用正确的话,可以减少定位和查询数据所需的IO操作。
-
索引的用途
索引类似于书籍的目录,它让数据库系统不必扫描整个表就能快速定位到需要的数据行。 如果一个查询的WHERE
子句中包含了索引列,数据库系统可以快速地找到匹配的行,从而提高查询速度。 索引的创建需要消耗磁盘空间和一些额外的维护成本,但是对查询速度的提升通常是值得的。 -
如何创建索引
使用 CREATE INDEX 语句来创建索引。 以下是 SQLite 中创建索引的语法:
CREATE INDEX 索引名 ON 表名 (列名1, 列名2, ...);
索引名
: 为索引取一个名称。
表名
: 要为其创建索引的表。
列名1, 列名2, ...
: 要索引的列。 多个列可以同时索引(复合索引),提高多条件查询的效率。- 示例:
假设有一个名为products
的表,包含id
、name
和price
列。 你想在name
列上创建索引:
CREATE INDEX idx_product_name ON products (name);
或者,你想在name
和price
列上创建复合索引:
CREATE INDEX idx_product_name_price ON products (name, price);
- 示例:
-
ii 删除表格(删)
使用drop
删除表,会将表彻底的删除掉,包括表结构和表数据。
DROP TABLE table_name;例子
-- 删除一个名为 "users" 的表格
DROP TABLE users;
用户若只是想删除表的数据
可以通过 删除记录的SQL语句 DELETE FROM 表名;
来实现相同的相关
iii 更改表格(改)
SQLite只支持部分的SQL更改表格的语句。支持的操作有:
- 修改表名
- 添加列
SQLite 不直接支持的修改表结构的操作有:
- 删除列: SQLite 不直接支持删除列。 要删除列,你需要创建一个新的表,只包含你想要保留的列,然后将数据从旧表复制到新表,最后删除旧表,并将新表改名为旧表的名称。
- 修改主键: SQLite 不直接支持修改主键。 通常需要创建新的表,添加新的主键,并复制数据。
修改表名:(SQLite支持)
ALTER TABLE old_table_nameRENAME TO new_table_name;例子:
-- 名为 "users_new " 的表格,修改名字为“users”
ALTER TABLE users_new RENAME TO users;
old_table_name
:要修改的表格的旧名称。new_table_name
:要修改的表格的新名称。
添加列:(SQLite支持)
ALTER TABLE table_name ADD column_name data_type [column_attributes];例子:
-- 名为 "users" 的表格,增加一列,列名称为job ,列数据类型为TEXT,约束为NOT NULL,默认值为 default_value
ALTER TABLE users ADD job TEXT NOT NULL DEFAULT default_value;
table_name
:要修改的表格名。column_name
:要添加的列名。data_type
:新列的数据类型。column_attributes
:可选的列属性,例如 NOT NULL、DEFAULT 等。
删除列:(SQLite间接支持)
SQLite虽然不可以直接通过DROP
来删除列,但是却可通过间接的方法实现,如下。
假设你有一个名为 users
的表,包含 id
(INTEGER) 和 name
(TEXT) 列。
ALTER TABLE users ADD job TEXT NOT NULL DEFAULT default_value;
删除 job 列 (间接方法):
-- 创建一个新的表,不包含 email 列
CREATE TABLE users_new (id INTEGER, name TEXT);-- 将数据从旧表复制到新表
INSERT INTO users_new SELECT id, name FROM users;-- 删除旧表
DROP TABLE users;-- 将新表改名为旧表的名称
ALTER TABLE users_new RENAME TO users;
iv 查询表格(查)
在linux系统中,使用sqlite3
命令进入数据库后,可以通过.schema
来查看所有的表格信息
sqlite>.schema
CREATE TABLE IF NOT EXISTS users (user_id INT PRIMARY KEY,username TEXT NOT NULL,email TEXT UNIQUE,password TEXT NOT NULL
);
您可以使用 SQLIte 命令中的 .tables
命令来验证表是否已成功创建,该命令用于列出附加数据库中的所有表。
sqlite>.tables
users
与记录相关的操作
i 插入记录
在 SQLite 数据库中,用户可以使用 INSERT
语句来添加新的记录到表中。 INSERT
语句有多种形式,取决于你如何指定要插入的值。
- 指定所有列的值:
这是最常用的方法,你需要指定表中的每一列的值,并按照列的顺序排列。
INSERT INTO 表名 (列名1, 列名2, 列名3, ...) VALUES (值1, 值2, 值3, ...);例子
假设你有一个名为 `users` 的表,包含 `id` (INTEGER), `name` (TEXT), `age` (INTEGER) 列。 要添加一个新的用户记录:
INSERT INTO users (id, name, age) VALUES (1, 'John Doe', 30);
- 表名: 要插入记录的表名。
- 列名1, 列名2, 列名3, …: 表中的列名,必须与 VALUES 子句中的值一一对应。
- 值1, 值2, 值3, …: 要插入的值,数据类型必须与相应的列匹配。
- 省略列名 (自动推断):
如果你要为表中的所有列都赋值,你可以省略列名,只需要提供值即可。 但是,值的顺序必须与表中列的顺序一致。
INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);示例 (延续上例):
INSERT INTO users VALUES (2, 'Jane Doe', 25);
- 使用默认值:
如果你想使用列的默认值(如果列定义了默认值),你可以省略该列的值。 但是,你必须至少提供一个列的值。
示例 (假设 age 列有默认值 20):
INSERT INTO users (id, name) VALUES (3, 'Peter Pan');
- 插入多行记录:
你可以使用单一 INSERT 语句插入多行记录:
INSERT INTO 表名 (列名1, 列名2, ...)
VALUES (值1, 值2, ...),(值3, 值4, ...),(值5, 值6, ...);
省略列名也可以。
INSERT INTO 表名
VALUES (值1, 值2, ...),(值3, 值4, ...),(值5, 值6, ...);
示例:
INSERT INTO users (id, name, age)
VALUES (4, 'Alice', 28),(5, 'Bob', 35);
注意事项:
- 数据类型匹配:
确保你提供的值与表中列的数据类型匹配。 否则,插入操作可能会失败。 - 主键冲突:
如果你有主键约束,确保插入的主键值是唯一的。 否则,插入操作会失败,并返回错误。 - 自动递增:
如果你的表中有一列定义为 AUTOINCREMENT,则该列的值会自动生成。 你不需要在 INSERT 语句中提供该列的值。 - 事务处理:
如果你要插入多行记录,或者需要将插入操作与其他数据库操作组合在一起,建议使用事务处理 (BEGIN TRANSACTION, COMMIT, ROLLBACK) 来确保数据的一致性。
ii 删除记录
在 SQLite 数据库中,用户可以使用 DELETE 语句来删除表中的记录。 DELETE 语句的基本语法如下:
DELETE FROM 表名
WHERE 条件;
-
DELETE FROM 表名
: 指定要删除记录的表名。 -
WHERE 条件
: 指定删除哪些记录。 这部分是必须的,否则会删除表中的所有记录! 条件可以使用各种比较运算符(=
,!=
,>
,<
,>=
,<=
),AND
和OR
运算符组合条件,以及其他 SQL 函数,如LIKE
,BETWEEN xx AND xx
。
具体的运用请看示例。
示例:
假设你有一个名为 users 的表,包含 id、name 和 email 列。
- 删除 id 为 1 的记录:
DELETE FROM users
WHERE id = 1;
- 删除 name 为 ‘John Doe’ 的记录:
DELETE FROM users
WHERE name = 'John Doe';
- 删除 email 包含 ‘@example.com’ 的记录:
DELETE FROM users
WHERE email LIKE '%@example.com%';
- 删除 id 在 1 到 5 之间的记录(注意,这是闭区间,包含了id=1和id=5的记录):
DELETE FROM users
WHERE id BETWEEN 1 AND 5;
- 删除多条件: 删除 id 为 1 并且 name 为 ‘Alice’ 的记录:
DELETE FROM users
WHERE id = 1 AND name = 'Alice';
- 删除全部记录
DELETE FROM users;
重要提示:
-
谨慎使用
DELETE
语句! 没有WHERE
子句的DELETE
语句会删除表中的所有记录。 在执行 DELETE 语句之前,务必仔细检查你的 WHERE 子句,确保它只删除你想要删除的记录。 -
备份数据库: 在执行重要的
DELETE
操作之前,最好先备份你的数据库,以防万一发生错误。 -
事务处理: 对于多个 DELETE 操作或与其他操作一起进行 DELETE 操作,建议使用事务处理 (BEGIN TRANSACTION, COMMIT, ROLLBACK) 来确保数据的一致性。 例如:
BEGIN TRANSACTION;
DELETE FROM users WHERE id = 1;
DELETE FROM orders WHERE user_id = 1;
COMMIT; -- or ROLLBACK;
iii 查询记录
在 SQLite 数据库中,用户可以使用 SELECT 语句来查询表中的记录。 SELECT 语句有很多种形式,可以满足各种查询需求。
- 查询所有列的所有记录:
这是最简单的查询方式,它会返回表中所有列的所有记录。
SELECT * FROM 表名;
例如,如果你的表名为 users,则查询语句为:
SELECT * FROM users;
- 查询指定的列:
你可以选择只查询表中的某些列,而不是所有列。
SELECT 列名1, 列名2, ... FROM 表名;
例如,要查询 users
表中的 name
和 email
列:
SELECT name, email FROM users;
- 使用 WHERE 子句过滤记录:
你可以使用 WHERE 子句来过滤记录,只返回满足特定条件的记录。
SELECT * FROM 表名 WHERE 条件;
例如,要查询 users 表中 id 为 1 的记录:
SELECT * FROM users WHERE id = 1;
用户可以使用各种比较运算符(=
, !=
, >
, <
, >=
, <=
),AND
和 OR
运算符组合条件,以及 LIKE
运算符进行模式匹配。
查询 age
大于 25 的用户:SELECT * FROM users WHERE age > 25;
查询 name
包含 “John”
的用户:SELECT * FROM users WHERE name LIKE '%John%';
查询 age
大于 25
且 email
包含 “@example.com”
的用户:SELECT * FROM users WHERE age > 25 AND email LIKE '%@example.com%';
- 使用
ORDER BY
子句排序记录:
用户可以使用 ORDER BY
子句来对查询结果进行排序。
SELECT * FROM 表名 ORDER BY 列名 [ASC|DESC];
ASC
表示升序排序(默认),DESC
表示降序排序。
例如,要按 age 升序排序查询结果:
SELECT * FROM users ORDER BY age ASC;
要按 name 降序排序:
SELECT * FROM users ORDER BY name DESC;
- 使用 LIMIT 子句限制返回的记录数:
你可以使用 LIMIT 子句来限制返回的记录数。
SELECT * FROM 表名 LIMIT n;
n
表示要返回的记录数。
例如,要只返回前 10 条记录:
SELECT * FROM users LIMIT 10;
你还可以指定起始位置和返回的记录数:
SELECT * FROM 表名 LIMIT m, n;
m
表示起始位置(从 0 开始),n
表示返回的记录数。 例如,返回从第 5 条记录开始的 10 条记录:
SELECT * FROM users LIMIT 4, 10;
- 使用
OFFSET
子句 (与LIMIT
配合使用):
OFFSET
用于跳过指定数量的行数,之后才开始返回结果,常与LIMIT
子句一起使用。
SELECT * FROM 表名 LIMIT n OFFSET m;
这些是 SQLite 中 SELECT
语句的一些基本用法,你可以根据实际需要组合使用这些功能来实现更复杂的查询。 记住在编写复杂查询时,使用括号来明确操作的优先级。
- 使用
DISTINCT
去除重复的信息
DISTINCT
关键字用于在 SQL 查询结果中去除重复的行。 它只返回唯一的值。DISTINCT
放在要返回的列的列表的前面。
SELECT DISTINCT 列名1, 列名2, ...
FROM 表名
[WHERE 条件];
DISTINCT
: 关键字,表示只返回唯一的值。列名1, 列名2, ...
: 要选择的列。 如果省略,则表示对所有列进行去重。FROM 表名
: 指定要查询的表。WHERE 条件
(可选): 用于过滤记录,在去除重复行之前进行筛选。
前面介绍了SELECT
语句最基本的语法格式,实际上SELECT
语句的完整语法格式要比其复杂得多。
下面将经常用到的带有主要子句的语法格式归纳如下
SELECT [DISTINCTIALL] select list
FROM table source
[WHERE search condition]
[GROUPBY group_by_expression]
[HAVING searching_condition]
[ORDER BY order_expression[ASC|DESC]]
假设SELECT
语句带有所有的子句,则其执行顺序如下:
(1)FROM 子句。
(2)WHERE 子句。
(3)GROUP BY 子句。
(4)HAVING 子句。
(5)SELECT 子句。
(6)ORDER BY 子句
iv 修改记录
在 SQLite 数据库中,用户可以使用 UPDATE
语句来修改表中的记录。 UPDATE
语句的基本语法如下:
UPDATE 表名
SET 列名1 = 新值1, 列名2 = 新值2, ...
WHERE 条件;
UPDATE 表名
: 指定要修改记录所在的表名。SET 列名1 = 新值1, 列名2 = 新值2, ...
: 指定要修改的列以及它们的新值。 可以用逗号分隔多个列和值。WHERE 条件
: 指定要修改哪些记录。 这部分是必须的,否则会更新表中的所有记录! 条件可以使用各种比较运算符(=
,!=
,>
,<
,>=
,<=
),AND
和OR
运算符组合条件,以及其他 SQL 函数。
示例:
假设你有一个名为 users
的表,包含 id
、name
、email
和 age
列。
- 修改
id
为 1 的用户的name
和age
:
UPDATE users
SET name = 'John Doe Updated', age = 35
WHERE id = 1;
- 修改
email
包含‘@example.com’
的用户的age
:
UPDATE users
SET age = 40
WHERE email LIKE '%@example.com%';
修改多个列,多条件更新: 修改 id
为 2 并且 name
为 ‘Jane Doe’ 的用户的 email
和 age
:
UPDATE users
SET email = 'jane.doe.updated@example.com', age = 30
WHERE id = 2 AND name = 'Jane Doe';
注意点:
-
谨慎使用 UPDATE 语句! 没有 WHERE 子句的 UPDATE 语句会更新表中的所有记录。 在执行 UPDATE 语句之前,务必仔细检查你的 WHERE 子句,确保它只更新你想要更新的记录。
-
备份数据库: 在执行重要的 UPDATE 操作之前,最好先备份你的数据库,以防万一发生错误。
-
事务处理: 对于多个 UPDATE 操作或与其他操作一起进行 UPDATE 操作,建议使用事务处理 (BEGIN TRANSACTION, COMMIT, ROLLBACK) 来确保数据的一致性。
-
数据类型: 确保新值的数据类型与要更新的列的数据类型匹配。 如果不匹配,更新操作可能会失败或导致数据错误。
Linux中使用sqlite3
待续
参考内容:
菜鸟教程-sqlite3
相关文章:
sqlite3 学习笔记
文章目录 前言SQL的概念与表格相关的操作i.创建表格(增)ii 删除表格(删)iii 更改表格(改)iv 查询表格(查) 与记录相关的操作i 插入记录ii 删除记录iii 查询记录iv 修改记录 Linux中使…...
C++ | 红黑树
前言 本篇博客讲解c中数据结构红黑树,看这篇博客之前请先去看: C | AVL树_c avl树能有重复节点吗-CSDN博客 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青…...
使用Ollama 在Ubuntu运行deepseek大模型:以DeepSeek-coder为例
DeepSeek大模型这几天冲上热搜啦! 咱们来亲身感受下DeepSeek模型的魅力吧! 整个操作流程非常简单方便,只需要2步,先安装Ollama,然后执行大模型即可。 安装Ollama 在Ubuntu下安装Ollama非常简单,直接sna…...
詳細講一下RN(React Native)中的列表組件FlatList和SectionList
1. FlatList 基礎使用 import React from react; import { View, Text, FlatList, StyleSheet } from react-native;export const SimpleListDemo: React.FC () > {// 1. 準備數據const data [{ id: 1, title: 項目 1 },{ id: 2, title: 項目 2 },{ id: 3, title: 項目 3…...
《深度揭秘:TPU张量计算架构如何重塑深度学习运算》
在深度学习领域,计算性能始终是推动技术发展的关键因素。从传统CPU到GPU,再到如今大放异彩的TPU(张量处理单元),每一次硬件架构的革新都为深度学习带来了质的飞跃。今天,就让我们深入探讨TPU的张量计算架构…...
QT使用eigen
QT使用eigen 1. 下载eigen https://eigen.tuxfamily.org/index.php?titleMain_Page#Download 下载后解压 2. QT引入eigen eigen源码好像只有头文件,因此只需要引入头文件就好了 qt新建项目后。修改pro文件. INCLUDEPATH E:\222078\qt\eigen-3.4.0\eigen-3.…...
工业“MCU+AI”
随着工业4.0的推进,传统工业设备正向智能化和自动化方向转型。这要求设备具备更高的算力、更强的实时处理能力以及支持AI算法的能力,以应对工业机器人、电机控制、预测性维护等复杂应用场景。 近年来越来越多的芯片厂商纷纷推出工业“MCUAI”产品&#…...
【Linux】Linux C判断两个IPv6地址是否有包含关系
功能说明 要判断两个 IPv6 地址是否具有包含关系,包括前缀的比较,可以通过以下步骤实现: 解析 IPv6 地址和前缀:将两个 IPv6 地址和它们的前缀长度解析为二进制形式。生成掩码:根据前缀长度生成掩码。按位比较&#…...
多模态论文笔记——TECO
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细解读多模态论文TECO(Temporally Consistent Transformer),即时间一致变换器,是一种用于视频生成的创新模型&…...
AI学习(vscode+deepseek+cline)
1、网页生成不成功时,直接根据提示让模型替你解决问题 2、http://localhost:3000 拒绝链接时,cmd输入命令InetMgr,网站右键新建-配置你的网页代码物理地址,这里我还输入本机登录名及密码了,并把端口地址由默认80修改为…...
物业软件推动物业行业数字化转型 实现高效管理和优质客户体验
内容概要 在当今高速发展的数字化时代,物业软件的出现不仅使物业管理变得更加高效,也为行业转型提供了强大的支持。通过整合多种功能,物业软件显著提升了管理效率和客户体验。例如,在线收费和停车管理功能,让业主享受…...
WGCLOUD使用手册 - 登录验证码如何设置
登录页面默认是不用输入验证码的,但是我们也可以根据自己的实际场景,配置登录页面显示验证码,要求用户输入 提示:您需要需要升级到v3.5.3或以上版本,才可以支持此功能 我们在server配置文件里找到配置项vercodeCheck&…...
C# 9.0记录类型:解锁开发效率的魔法密码
一、引言:记录类型的神奇登场 在 C# 的编程世界中,数据结构就像是构建软件大厦的基石,其重要性不言而喻。然而,传统的数据结构定义方式,尤其是在处理简单的数据承载对象时,常常显得繁琐复杂。例如…...
Python 函数魔法书:基础、范例、避坑、测验与项目实战
Python 函数魔法书:基础、范例、避坑、测验与项目实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南,旨在帮助读者从基础入门到项目实战,全面提升编程能力。文章结构由 5 个版块组成,内容层层递进…...
Unbutu虚拟机+eclipse+CDT编译调试环境搭建
问题1: 安装CDT,直接Help->eclipse Market space-> 搜cdt , install,等待重启即可. 问题2:C变量不识别vector ’could not be resolved 这是库的头文件没加好,右键Properties->C Build->Enviroment,增加…...
项目部署(springboot项目)
1、安装Nginx,并开启 2、前端项目打包:npm run build:prod--->dist 3、后端项目打包:install--->xxx.jar 4、开放需要的端口号:比如我的后端项目端口号为8282,则需要防火墙和服务器同时开发8282端口 5、将di…...
Spring MVC拦截器
文章目录 1. 拦截器(interceptor)的作用2. 拦截器和过滤器区别3. 拦截器是快速入门 1. 拦截器(interceptor)的作用 Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链,这条…...
Nginx 路由匹配(Nginx Route Matching)
从小白到高手:深入Nginx 路由匹配 在现代互联网应用中,Nginx 作为一款高性能的 Web 服务器,因其灵活性和高效性而广泛应用于各类网站和服务。Nginx 的路由匹配规则是其核心功能之一,负责决定如何处理传入的请求。通过这些规则&am…...
基于RIP的MGRE实验
实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议,搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…...
Spring Boot 中的事件发布与监听:深入理解 ApplicationEventPublisher(附Demo)
目录 前言1. 基本知识2. Demo3. 实战代码 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全&am…...
【Java基础-41.5】深入解析Java异常链:构建清晰的错误追踪体系
在Java编程中,异常处理是保证程序健壮性和可维护性的重要部分。然而,在实际开发中,异常往往不是孤立发生的,而是由一系列相关的异常引发的。为了更好地理解和处理这种复杂的异常场景,Java引入了 异常链(Exc…...
STM32使用VScode开发
文章目录 Makefile形式创建项目新建stm项目下载stm32cubemx新建项目IED makefile保存到本地arm gcc是编译的工具链G++配置编译Cmake +vscode +MSYS2方式bilibiliMSYS2 统一环境配置mingw32-make -> makewindows环境变量Cmake CmakeListnijia 编译输出elfCMAKE_GENERATOR查询…...
特权模式docker逃逸
目录 1.环境 2.上线哥斯拉 3.特权模式逃逸 1.判断是否为docker环境 2.判断是否为特权模式 3.挂载宿主机磁盘到docker 4.计划任务反弹shell 1.环境 ubuntu部署一个存在CVE-2017-12615的docker: (ip:192.168.117.147) kali(ip:192.168.117.128) 哥斯拉 2.上线哥斯拉…...
装出字符串中国第一个匹配项的下标
hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧! function strStr(haystack, needle) {return haystack.indexOf(needle); }// 测试示例 const haystack "sadbutsad"; const needle "sad&q…...
从腾讯云数据仓库TCHouse安全地转移数据到AWS Redshift
实现从AWS Direct Connect连接到腾讯云数据仓库TCHouse-P、TCHouse-C或TCHouse-D,然后使用AWS Glue读取数据并在AWS Redshift中创建对应表并复制数据,需要按照以下步骤进行操作: 网络连接设置 AWS Direct Connect配置: 在AWS管理…...
DataComp:探索下一代多模态数据集
目录 一、TL;DR 二、方法 2.1 为什么要单独研究数据质量? 2.2 数据质量的研究范式 三、其他的工作(related work) 3.1 传统的做法 3.2 数据剪枝和去重(paper直接翻译) 四、DataComp的benchmark 4.1 竞赛条件限…...
【linux】Linux 常见目录特性、权限和功能
目录特性默认权限主要功能/用途/根目录,所有目录的起点755文件系统的顶层目录,包含所有其他子目录和文件/bin基础二进制命令目录(系统启动和修复必需的命令)755存放所有用户可用的基本命令(如 ls, cp, bash 等…...
基于SpringBoot电脑组装系统平台系统功能实现六
一、前言介绍: 1.1 项目摘要 随着科技的进步,计算机硬件技术日新月异,包括处理器(CPU)、主板、内存、显卡等关键部件的性能不断提升,为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…...
Direct2D 极速教程(1) —— 画图形
极速导航 Direct2D 简介创建新项目:001-DrawGraphics弄一个白窗口在窗口上画图 Direct2D 简介 大家在学 WINAPI 的时候的时候有没有想过,怎么在一副窗口上画图呢?大家知道 Windows 系统是 GUI 图形用户界面 系统,以 Graphics 图形…...
DF 开发1
https://www.bilibili.com/video/BV1RFChYxEhJ/ 多个 workspace 图片上传 S3 上传大量文档 https://www.bilibili.com/video/BV1ySsEeUE6i 解决方案 返回 metadata https://www.bilibili.com/video/BV1t3e5eaENo 给出内容引用出处 模型负载均衡 可以以 ollama 在不同端口起服…...
[Computer Vision]实验二:图像特征点提取
目录 一、实验内容 二、实验过程及结果 2.1 Harris角点检测 2.2 SIFT算法 三、实验小结 一、实验内容 采用Harris与SIFT分别提取特征点及对应的描述子,对比两者的区别(特征点数量、分布、描述子维度、图像变化对二者的影响等)利用特征匹…...
在做题中学习(82):最小覆盖子串
解法:同向双指针——>滑动窗口 思路:题目要求找到s里包含t所有字符的最小子串,这就需要记录在s中每次查找并扩大范围时所包含进去的字符种类是否和t的相同,并且:题目提示t中会有重复字符,因此不能简单认…...
< OS 有关> BaiduPCS-Go 程序的 菜单脚本 Script: BaiduPCS-Go.Menu.sh (bdgo.sh)
目标: 使用 日本阿里云的 VPM 传输文件。 暂时方案: 使用 主机JPN 下载 https://huggingface.co/ 上模型从 JPN 放到 度狗上在家里从狗度下载 为了减少编程,尽量使用现在软件 ,就找到 GitHub - qjfoidnh/BaiduPCS-Go: iikira…...
redis缓存和springboot缓存包冲突怎么办
如果Redis缓存与Spring Boot缓存包发生冲突,可以采取以下几种解决方案: 排除Spring Boot缓存包:在pom.xml文件中排除Spring Boot的缓存依赖,以避免与Redis缓存冲突。例如: <dependency><groupId>org.spr…...
云计算技术深度解析与代码使用案例
云计算技术深度解析与代码使用案例 引言 随着信息技术的飞速发展,云计算作为一种革命性的技术,正在逐步改变我们的生活和工作方式。云计算不仅提供了前所未有的计算能力和存储资源,还以其灵活性和可扩展性,成为现代企业数字化转型的重要支撑。本文将深入探讨云计算的核心…...
【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)
祈愿在2025蛇年里, 伟大的祖国风调雨顺、国泰民安、每个人齐心协力,共同经历这百年未有之大变局时代(国际政治、AI技术……) 祝福亲友同事孩子们平安健康(安全、安全、安全)、巳巳如意! 背景需…...
React Router v6配置路由守卫
首先准备好以下页面 登录页:用户可以在此页面登录。 受保护页:只有登录的用户可以访问,否则会重定向到登录页。 公共页面:不需要鉴权,任何人都可以访问。 1. 安装依赖 首先,我们需要安装 react-router-do…...
双层Git管理项目,github托管显示正常
双层Git管理项目,github托管显示正常 背景 在写React项目时,使用Next.js,该项目默认由git托管。但是我有在项目代码外层记笔记的习惯,我就在外层使用了git托管。 目录如下 code 层内也有.git 文件,对其托管。 我没太在意&…...
Linux--权限
Linux系统的权限管理是保障系统安全的重要机制,以下详细讲解权限相关概念及操作指令: 一、基础权限机制 1. 权限的三元组,读(r)、写(w)、执行(x) 每个文件或目录有三组…...
第25章 项目启航前的密谈
在那弥漫着严谨与专注气息的会议室里,苏睿所长端坐在会议桌前,宛如一座沉稳的山峰,散发着一种让人安心的力量。他的神情认真而庄重,目光中透着几分感慨,仿佛在时光的长河中回溯着项目的点点滴滴。微微侧身看向东方艾艾…...
ModernBERT 为我们带来了哪些启示?
当谷歌在 2018 年推出 BERT 模型时,恐怕没有料到这个 3.4 亿参数的模型会成为自然语言处理领域的奠基之作。 六年后的今天,面对动辄千亿参数的大语言模型浪潮,Answer.AI、LightOn与 HuggingFace 联手打造的 ModernBERT 却选择了一条返璞归真的…...
【MySQL】--- 复合查询 内外连接
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: MySQL 🏠 基本查询回顾 假设有以下表结构: 查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为…...
Android Studio打包APK
1.导出APK安装包 如果是首次打包,Create new 单击蓝色对话框右边文件夹📂图标 ,选择密钥保存路径,然后在下方File name对话框中填写您想要名称,再点击OK回到密钥创建对话框。 在此对话框中填写密码(Passwo…...
RKNN_C++版本-YOLOV5
1.背景 为了实现低延时,所以开始看看C版本的rknn的使用,确实有不足的地方,请指正(代码借鉴了rk官方的仓库文件)。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义,详见…...
Git常用命令集合
见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看...... git init <directory》初始化本地仓库 git add <file> 添加文件到暂存区 git …...
【deepseek】deepseek-r1本地部署-第一步:下载LM Studio
要下载LM Studio,可以按照以下步骤进行: 一、访问LM Studio官方网站 打开必应(注意!百度无法打开官网),输入LM Studio的官方网址:LM Studio - Discover, download, and run local LLMs。进入L…...
【数据结构】_链表经典算法OJ:合并两个有序数组
目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接:21. 合并两个有序链表 - 力扣(LeetCode) 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…...
mybatis(78/134)
前天学了很多,关于java的反射机制,其实跳过了new对象,然后底层生成了字节码,创建了对应的编码。手搓了一遍源码,还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …...
【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令
文章目录 指令格式(重点)1. 立即数2. 寄存器位移 一、数据传送指令1. MOV指令2. MVN指令3. LDR指令 二、数据计算指令1. ADD指令1. SUB指令1. MUL指令 三、位运算指令1. AND指令2. ORR指令3. EOR指令4. BIC指令 四、比较指令五、跳转指令1. B/BL指令2. l…...
Mybatis配置文件详解
MyBatis通过XML或注解的方式将Java对象与数据库中的记录进行映射,极大地简化了数据访问层的开发。而在MyBatis的核心组成部分中,配置文件扮演着举足轻重的角色。它不仅定义了MyBatis的运行环境,还配置了数据源、事务管理、映射器等关键元素&a…...