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

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功能动词
数据定义DDCreate、Drop(删除)、Alter(修改)
数据查询DQSelect
数据操纵DMInsert(插入)、Update(更新)、Delete(删除)
数据控制DCGrant(授权)、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
);
  1. CREATE TABLE: 创建表格的关键字。
  2. IF NOT EXISTS: 可以避免出现添加已存在数据表的SQL错误信息
  3. table_name: 要创建的表格的名称。
  4. column_name: 列的名称。
  5. data_type: 数据类型,例如 INT, TEXT, REAL, BLOB 等。
  6. constraints: 约束,例如 PRIMARY KEY, UNIQUE, NOT NULL, FOREIGN KEY 等。

列(字段)相关的配置

每个列(字段)都有对应的配置,如列名称,列数据类型,类约束,列默认值等。列配置的具体内容如下:

  1. 列的数据类型

    • INT: 整数。
    • TEXT: 文本字符串。
    • REAL: 浮点数。
    • BLOB: 二进制数据。专门用于存放图像、视频动画和其他类型的文件等。
    • DATE: 日期。
    • DATETIME: 日期和时间。
  2. 列的默认值
    DEFAULT 关键字用于为表格中的列设置默认值。当插入新记录时(注意:这不是创建表时存在的默认值),如果该列的值没有被明确指定,则会自动使用默认值。
    CREATE TABLE table_name ( column_name data_type DEFAULT default_value, ... );
    DEFAULT: 设置默认值的关键字。
    default_value: 默认值,可以是常量、表达式、函数等

  3. 列(字段)的约束:

    • PRIMARY KEY: 主键,用于唯一标识每条记录。
      在数据表中能够唯一识别记录的字段,都会被人们设置为主键,如“学号”字段。
      当某个字段被设置为主键后,该字段中就不能再有重复值,也不能有空值,数据库管理系统将强制执行这一规则,这就是主键约束。
    • FOREIGN KEY: 外键,用于建立两个表格之间的关系。
  4. 列的索引(略读)

    • 索引 (INDEX):定义索引,用于提高查询效率。除表之外,索引是大型数据库系统中最重要的对象之一!索引是一种树形结构,如果使用正确的话,可以减少定位和查询数据所需的IO操作。

    • 索引的用途
      索引类似于书籍的目录,它让数据库系统不必扫描整个表就能快速定位到需要的数据行。 如果一个查询的 WHERE 子句中包含了索引列,数据库系统可以快速地找到匹配的行,从而提高查询速度。 索引的创建需要消耗磁盘空间和一些额外的维护成本,但是对查询速度的提升通常是值得的。

    • 如何创建索引
      使用 CREATE INDEX 语句来创建索引。 以下是 SQLite 中创建索引的语法:
      CREATE INDEX 索引名 ON 表名 (列名1, 列名2, ...);
      索引名: 为索引取一个名称。
      表名: 要为其创建索引的表。
      列名1, 列名2, ...: 要索引的列。 多个列可以同时索引(复合索引),提高多条件查询的效率。

      • 示例:
        假设有一个名为 products 的表,包含 idnameprice 列。 你想在 name 列上创建索引:
        CREATE INDEX idx_product_name ON products (name);
        或者,你想在 nameprice 列上创建复合索引:
        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 语句有多种形式,取决于你如何指定要插入的值。

  1. 指定所有列的值:

这是最常用的方法,你需要指定表中的每一列的值,并按照列的顺序排列。

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, …: 要插入的值,数据类型必须与相应的列匹配。
  1. 省略列名 (自动推断):

如果你要为表中的所有列都赋值,你可以省略列名,只需要提供值即可。 但是,值的顺序必须与表中列的顺序一致。

INSERT INTO 表名 VALUES (值1, 值2, 值3, ...);示例 (延续上例):
INSERT INTO users VALUES (2, 'Jane Doe', 25);
  1. 使用默认值:

如果你想使用列的默认值(如果列定义了默认值),你可以省略该列的值。 但是,你必须至少提供一个列的值。

示例 (假设 age 列有默认值 20):

INSERT INTO users (id, name) VALUES (3, 'Peter Pan');
  1. 插入多行记录:

你可以使用单一 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 条件: 指定删除哪些记录。 这部分是必须的,否则会删除表中的所有记录! 条件可以使用各种比较运算符(=, !=, >, <, >=, <=),ANDOR 运算符组合条件,以及其他 SQL 函数,如LIKEBETWEEN 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 语句有很多种形式,可以满足各种查询需求。

  1. 查询所有列的所有记录:

这是最简单的查询方式,它会返回表中所有列的所有记录。

SELECT * FROM 表名;

例如,如果你的表名为 users,则查询语句为:

SELECT * FROM users;
  1. 查询指定的列:

你可以选择只查询表中的某些列,而不是所有列。

SELECT 列名1, 列名2, ... FROM 表名;

例如,要查询 users 表中的 nameemail 列:

SELECT name, email FROM users;
  1. 使用 WHERE 子句过滤记录:

你可以使用 WHERE 子句来过滤记录,只返回满足特定条件的记录。

SELECT * FROM 表名 WHERE 条件;

例如,要查询 users 表中 id 为 1 的记录:

SELECT * FROM users WHERE id = 1;

用户可以使用各种比较运算符(=, !=, >, <, >=, <=),ANDOR 运算符组合条件,以及 LIKE 运算符进行模式匹配。
查询 age 大于 25 的用户:SELECT * FROM users WHERE age > 25;
查询 name 包含 “John” 的用户:SELECT * FROM users WHERE name LIKE '%John%';
查询 age 大于 25email 包含 “@example.com” 的用户:SELECT * FROM users WHERE age > 25 AND email LIKE '%@example.com%';

  1. 使用 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;
  1. 使用 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;
  1. 使用 OFFSET 子句 (与LIMIT配合使用):
    OFFSET 用于跳过指定数量的行数,之后才开始返回结果,常与 LIMIT 子句一起使用。
SELECT * FROM 表名 LIMIT n OFFSET m;

这些是 SQLite 中 SELECT 语句的一些基本用法,你可以根据实际需要组合使用这些功能来实现更复杂的查询。 记住在编写复杂查询时,使用括号来明确操作的优先级。

  1. 使用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 条件: 指定要修改哪些记录。 这部分是必须的,否则会更新表中的所有记录! 条件可以使用各种比较运算符(=, !=, >, <, >=, <=),ANDOR 运算符组合条件,以及其他 SQL 函数。

示例:

假设你有一个名为 users 的表,包含 idnameemailage 列。

  1. 修改 id 为 1 的用户的 nameage:
UPDATE users
SET name = 'John Doe Updated', age = 35
WHERE id = 1;
  1. 修改 email 包含 ‘@example.com’ 的用户的 age:
UPDATE users
SET age = 40
WHERE email LIKE '%@example.com%';

修改多个列,多条件更新: 修改 id 为 2 并且 name 为 ‘Jane Doe’ 的用户的 emailage

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.创建表格&#xff08;增&#xff09;ii 删除表格&#xff08;删&#xff09;iii 更改表格&#xff08;改&#xff09;iv 查询表格&#xff08;查&#xff09; 与记录相关的操作i 插入记录ii 删除记录iii 查询记录iv 修改记录 Linux中使…...

C++ | 红黑树

前言 本篇博客讲解c中数据结构红黑树&#xff0c;看这篇博客之前请先去看&#xff1a; C | AVL树_c avl树能有重复节点吗-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青…...

使用Ollama 在Ubuntu运行deepseek大模型:以DeepSeek-coder为例

DeepSeek大模型这几天冲上热搜啦&#xff01; 咱们来亲身感受下DeepSeek模型的魅力吧&#xff01; 整个操作流程非常简单方便&#xff0c;只需要2步&#xff0c;先安装Ollama&#xff0c;然后执行大模型即可。 安装Ollama 在Ubuntu下安装Ollama非常简单&#xff0c;直接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张量计算架构如何重塑深度学习运算》

在深度学习领域&#xff0c;计算性能始终是推动技术发展的关键因素。从传统CPU到GPU&#xff0c;再到如今大放异彩的TPU&#xff08;张量处理单元&#xff09;&#xff0c;每一次硬件架构的革新都为深度学习带来了质的飞跃。今天&#xff0c;就让我们深入探讨TPU的张量计算架构…...

QT使用eigen

QT使用eigen 1. 下载eigen https://eigen.tuxfamily.org/index.php?titleMain_Page#Download 下载后解压 2. QT引入eigen eigen源码好像只有头文件&#xff0c;因此只需要引入头文件就好了 qt新建项目后。修改pro文件. INCLUDEPATH E:\222078\qt\eigen-3.4.0\eigen-3.…...

工业“MCU+AI”

随着工业4.0的推进&#xff0c;传统工业设备正向智能化和自动化方向转型。这要求设备具备更高的算力、更强的实时处理能力以及支持AI算法的能力&#xff0c;以应对工业机器人、电机控制、预测性维护等复杂应用场景。 近年来越来越多的芯片厂商纷纷推出工业“MCUAI”产品&#…...

【Linux】Linux C判断两个IPv6地址是否有包含关系

功能说明 要判断两个 IPv6 地址是否具有包含关系&#xff0c;包括前缀的比较&#xff0c;可以通过以下步骤实现&#xff1a; 解析 IPv6 地址和前缀&#xff1a;将两个 IPv6 地址和它们的前缀长度解析为二进制形式。生成掩码&#xff1a;根据前缀长度生成掩码。按位比较&#…...

多模态论文笔记——TECO

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文TECO&#xff08;Temporally Consistent Transformer&#xff09;&#xff0c;即时间一致变换器&#xff0c;是一种用于视频生成的创新模型&…...

AI学习(vscode+deepseek+cline)

1、网页生成不成功时&#xff0c;直接根据提示让模型替你解决问题 2、http://localhost:3000 拒绝链接时&#xff0c;cmd输入命令InetMgr&#xff0c;网站右键新建-配置你的网页代码物理地址&#xff0c;这里我还输入本机登录名及密码了&#xff0c;并把端口地址由默认80修改为…...

物业软件推动物业行业数字化转型 实现高效管理和优质客户体验

内容概要 在当今高速发展的数字化时代&#xff0c;物业软件的出现不仅使物业管理变得更加高效&#xff0c;也为行业转型提供了强大的支持。通过整合多种功能&#xff0c;物业软件显著提升了管理效率和客户体验。例如&#xff0c;在线收费和停车管理功能&#xff0c;让业主享受…...

WGCLOUD使用手册 - 登录验证码如何设置

登录页面默认是不用输入验证码的&#xff0c;但是我们也可以根据自己的实际场景&#xff0c;配置登录页面显示验证码&#xff0c;要求用户输入 提示&#xff1a;您需要需要升级到v3.5.3或以上版本&#xff0c;才可以支持此功能 我们在server配置文件里找到配置项vercodeCheck&…...

C# 9.0记录类型:解锁开发效率的魔法密码

一、引言&#xff1a;记录类型的神奇登场 在 C# 的编程世界中&#xff0c;数据结构就像是构建软件大厦的基石&#xff0c;其重要性不言而喻。然而&#xff0c;传统的数据结构定义方式&#xff0c;尤其是在处理简单的数据承载对象时&#xff0c;常常显得繁琐复杂。例如&#xf…...

Python 函数魔法书:基础、范例、避坑、测验与项目实战

Python 函数魔法书&#xff1a;基础、范例、避坑、测验与项目实战 内容简介 本系列文章是为 Python3 学习者精心设计的一套全面、实用的学习指南&#xff0c;旨在帮助读者从基础入门到项目实战&#xff0c;全面提升编程能力。文章结构由 5 个版块组成&#xff0c;内容层层递进…...

Unbutu虚拟机+eclipse+CDT编译调试环境搭建

问题1: 安装CDT&#xff0c;直接Help->eclipse Market space-> 搜cdt , install&#xff0c;等待重启即可. 问题2&#xff1a;C变量不识别vector ’could not be resolved 这是库的头文件没加好&#xff0c;右键Properties->C Build->Enviroment&#xff0c;增加…...

项目部署(springboot项目)

1、安装Nginx&#xff0c;并开启 2、前端项目打包&#xff1a;npm run build:prod--->dist 3、后端项目打包&#xff1a;install--->xxx.jar 4、开放需要的端口号&#xff1a;比如我的后端项目端口号为8282&#xff0c;则需要防火墙和服务器同时开发8282端口 5、将di…...

Spring MVC拦截器

文章目录 1. 拦截器(interceptor)的作用2. 拦截器和过滤器区别3. 拦截器是快速入门 1. 拦截器(interceptor)的作用 Spring MVC 的拦截器类似于 Servlet 开发中的过滤器 Filter&#xff0c;用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链&#xff0c;这条…...

Nginx 路由匹配(Nginx Route Matching)

从小白到高手&#xff1a;深入Nginx 路由匹配 在现代互联网应用中&#xff0c;Nginx 作为一款高性能的 Web 服务器&#xff0c;因其灵活性和高效性而广泛应用于各类网站和服务。Nginx 的路由匹配规则是其核心功能之一&#xff0c;负责决定如何处理传入的请求。通过这些规则&am…...

基于RIP的MGRE实验

实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议&#xff0c;搞通公网配置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. 实战代码 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&am…...

【Java基础-41.5】深入解析Java异常链:构建清晰的错误追踪体系

在Java编程中&#xff0c;异常处理是保证程序健壮性和可维护性的重要部分。然而&#xff0c;在实际开发中&#xff0c;异常往往不是孤立发生的&#xff0c;而是由一系列相关的异常引发的。为了更好地理解和处理这种复杂的异常场景&#xff0c;Java引入了 异常链&#xff08;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 大家好&#xff01;今天开写一个新章节&#xff0c;每一天一道算法题。让我们一起来学习算法思维吧&#xff01; 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&#xff0c;然后使用AWS Glue读取数据并在AWS Redshift中创建对应表并复制数据&#xff0c;需要按照以下步骤进行操作&#xff1a; 网络连接设置 AWS Direct Connect配置&#xff1a; 在AWS管理…...

DataComp:探索下一代多模态数据集

目录 一、TL;DR 二、方法 2.1 为什么要单独研究数据质量&#xff1f; 2.2 数据质量的研究范式 三、其他的工作&#xff08;related work&#xff09; 3.1 传统的做法 3.2 数据剪枝和去重&#xff08;paper直接翻译&#xff09; 四、DataComp的benchmark 4.1 竞赛条件限…...

【linux】Linux 常见目录特性、权限和功能

目录特性默认权限主要功能/用途/根目录&#xff0c;所有目录的起点755文件系统的顶层目录&#xff0c;包含所有其他子目录和文件/bin基础二进制命令目录&#xff08;系统启动和修复必需的命令&#xff09;755存放所有用户可用的基本命令&#xff08;如 ls, cp, bash 等&#xf…...

基于SpringBoot电脑组装系统平台系统功能实现六

一、前言介绍&#xff1a; 1.1 项目摘要 随着科技的进步&#xff0c;计算机硬件技术日新月异&#xff0c;包括处理器&#xff08;CPU&#xff09;、主板、内存、显卡等关键部件的性能不断提升&#xff0c;为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…...

Direct2D 极速教程(1) —— 画图形

极速导航 Direct2D 简介创建新项目&#xff1a;001-DrawGraphics弄一个白窗口在窗口上画图 Direct2D 简介 大家在学 WINAPI 的时候的时候有没有想过&#xff0c;怎么在一副窗口上画图呢&#xff1f;大家知道 Windows 系统是 GUI 图形用户界面 系统&#xff0c;以 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分别提取特征点及对应的描述子&#xff0c;对比两者的区别&#xff08;特征点数量、分布、描述子维度、图像变化对二者的影响等&#xff09;利用特征匹…...

在做题中学习(82):最小覆盖子串

解法&#xff1a;同向双指针——>滑动窗口 思路&#xff1a;题目要求找到s里包含t所有字符的最小子串&#xff0c;这就需要记录在s中每次查找并扩大范围时所包含进去的字符种类是否和t的相同&#xff0c;并且&#xff1a;题目提示t中会有重复字符&#xff0c;因此不能简单认…...

< OS 有关> BaiduPCS-Go 程序的 菜单脚本 Script: BaiduPCS-Go.Menu.sh (bdgo.sh)

目标&#xff1a; 使用 日本阿里云的 VPM 传输文件。 暂时方案&#xff1a; 使用 主机JPN 下载 https://huggingface.co/ 上模型从 JPN 放到 度狗上在家里从狗度下载 为了减少编程&#xff0c;尽量使用现在软件 &#xff0c;就找到 GitHub - qjfoidnh/BaiduPCS-Go: iikira…...

redis缓存和springboot缓存包冲突怎么办

如果Redis缓存与Spring Boot缓存包发生冲突&#xff0c;可以采取以下几种解决方案&#xff1a; 排除Spring Boot缓存包&#xff1a;在pom.xml文件中排除Spring Boot的缓存依赖&#xff0c;以避免与Redis缓存冲突。例如&#xff1a; <dependency><groupId>org.spr…...

云计算技术深度解析与代码使用案例

云计算技术深度解析与代码使用案例 引言 随着信息技术的飞速发展,云计算作为一种革命性的技术,正在逐步改变我们的生活和工作方式。云计算不仅提供了前所未有的计算能力和存储资源,还以其灵活性和可扩展性,成为现代企业数字化转型的重要支撑。本文将深入探讨云计算的核心…...

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…...

React Router v6配置路由守卫

首先准备好以下页面 登录页&#xff1a;用户可以在此页面登录。 受保护页&#xff1a;只有登录的用户可以访问&#xff0c;否则会重定向到登录页。 公共页面&#xff1a;不需要鉴权&#xff0c;任何人都可以访问。 1. 安装依赖 首先&#xff0c;我们需要安装 react-router-do…...

双层Git管理项目,github托管显示正常

双层Git管理项目&#xff0c;github托管显示正常 背景 在写React项目时&#xff0c;使用Next.js,该项目默认由git托管。但是我有在项目代码外层记笔记的习惯&#xff0c;我就在外层使用了git托管。 目录如下 code 层内也有.git 文件&#xff0c;对其托管。 我没太在意&…...

Linux--权限

Linux系统的权限管理是保障系统安全的重要机制&#xff0c;以下详细讲解权限相关概念及操作指令&#xff1a; 一、基础权限机制 1. 权限的三元组&#xff0c;读&#xff08;r&#xff09;、写&#xff08;w&#xff09;、执行&#xff08;x&#xff09; 每个文件或目录有三组…...

第25章 项目启航前的密谈

在那弥漫着严谨与专注气息的会议室里&#xff0c;苏睿所长端坐在会议桌前&#xff0c;宛如一座沉稳的山峰&#xff0c;散发着一种让人安心的力量。他的神情认真而庄重&#xff0c;目光中透着几分感慨&#xff0c;仿佛在时光的长河中回溯着项目的点点滴滴。微微侧身看向东方艾艾…...

ModernBERT 为我们带来了哪些启示?

当谷歌在 2018 年推出 BERT 模型时&#xff0c;恐怕没有料到这个 3.4 亿参数的模型会成为自然语言处理领域的奠基之作。 六年后的今天&#xff0c;面对动辄千亿参数的大语言模型浪潮&#xff0c;Answer.AI、LightOn与 HuggingFace 联手打造的 ModernBERT 却选择了一条返璞归真的…...

【MySQL】--- 复合查询 内外连接

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; MySQL &#x1f3e0; 基本查询回顾 假设有以下表结构&#xff1a; 查询工资高于500或岗位为MANAGER的雇员&#xff0c;同时还要满足他们的姓名首字母为…...

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…...

RKNN_C++版本-YOLOV5

1.背景 为了实现低延时&#xff0c;所以开始看看C版本的rknn的使用&#xff0c;确实有不足的地方&#xff0c;请指正&#xff08;代码借鉴了rk官方的仓库文件&#xff09;。 2.基本的操作流程 1.读取模型初始化 // 设置基本信息 // 在postprocess.h文件中定义&#xff0c;详见…...

Git常用命令集合

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... git init <directory》初始化本地仓库 git add <file> 添加文件到暂存区 git …...

【deepseek】deepseek-r1本地部署-第一步:下载LM Studio

要下载LM Studio&#xff0c;可以按照以下步骤进行&#xff1a; 一、访问LM Studio官方网站 打开必应&#xff08;注意&#xff01;百度无法打开官网&#xff09;&#xff0c;输入LM Studio的官方网址&#xff1a;LM Studio - Discover, download, and run local LLMs。进入L…...

【数据结构】_链表经典算法OJ:合并两个有序数组

目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…...

mybatis(78/134)

前天学了很多&#xff0c;关于java的反射机制&#xff0c;其实跳过了new对象&#xff0c;然后底层生成了字节码&#xff0c;创建了对应的编码。手搓了一遍源码&#xff0c;还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …...

【物联网】ARM核常用指令(详解):数据传送、计算、位运算、比较、跳转、内存访问、CPSR/SPSR、流水线及伪指令

文章目录 指令格式&#xff08;重点&#xff09;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对象与数据库中的记录进行映射&#xff0c;极大地简化了数据访问层的开发。而在MyBatis的核心组成部分中&#xff0c;配置文件扮演着举足轻重的角色。它不仅定义了MyBatis的运行环境&#xff0c;还配置了数据源、事务管理、映射器等关键元素&a…...