当前位置: 首页 > 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中使…...

Visual Studio Community 2022(VS2022)安装方法

废话不多说直接上图&#xff1a; 直接上步骤&#xff1a; 1&#xff0c;首先可以下载安装一个Visual Studio安装器&#xff0c;叫做Visual Studio installer。这个安装文件很小&#xff0c;很快就安装完成了。 2&#xff0c;打开Visual Studio installer 小软件 3&#xff0c…...

项目集成RabbitMQ

文章目录 1.common-rabbitmq-starter1.创建common-rabbitmq-starter2.pom.xml3.自动配置1.RabbitMQAutoConfiguration.java2.spring.factories 2.测试使用1.创建common-rabbitmq-starter-demo2.目录结构3.pom.xml4.application.yml5.TestConfig.java 配置交换机和队列6.TestCon…...

3097. 或值至少为 K 的最短子数组 II

3097. 或值至少为 K 的最短子数组 II 题目链接&#xff1a;3097. 或值至少为 K 的最短子数组 II 代码如下&#xff1a; class Solution { public:int minimumSubarrayLength(vector<int>& nums, int k) {int res INT_MAX;for (int i 0;i < nums.size();i) {in…...

Linux 35.6 + JetPack v5.1.4之编译器升级

Linux 35.6 JetPack v5.1.4之编译器升级 1. 源由2. 步骤步骤一&#xff1a;添加编译器源步骤二&#xff1a;安装gcc/g 11/13步骤三&#xff1a;确认安装版本步骤四&#xff1a;配置gcc/g版本步骤五&#xff1a;使能gcc/g版本步骤六&#xff1a;查看使能链接关系步骤七&#xf…...

[MoeCTF 2022]ezhtml

题目 查看页面源代码 有个/evil.js文件打开查看 看到了flag NSSCTF{e15f7f51-d1a0-4d1b-a96d-c987a4fe69a0} 到这里也就可以直接结束了 // 获取元素节点 var sx document.querySelector(#sx); // 获取 id 为 sx 的元素节点 var yw document.querySelector(#yw); // 获取…...

活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!

Code Without Barriers 上海活动回顾 Code Without Barriers&#xff1a;AI & DATA 深入探索人工智能与数据如何变革行业 2025年1月16日&#xff0c;微软开发者社区 Code Without Barriers &#xff08;CWB&#xff09;携手 She Rewires 她原力在大中华区的首场活动“AI &…...

使用 Redis List 和 Pub/Sub 实现简单的消息队列

使用 Redis List 和 Pub/Sub 实现简单的消息队列 Redis 本身不是专门的消息队列系统&#xff0c;但它提供了多种数据结构&#xff08;如 List、Pub/Sub、Stream&#xff09;来实现消息队列功能。根据不同的业务需求&#xff0c;可以选择不同的方式&#xff1a; 在 Redis 中&a…...

本地项目上传到码云

本地项目上传到码云 写在前面1. 系统安装git环境2. 创建仓库3. 开始上传3.1 创建新的远程仓库3.2 在项目的文件夹用git打开3.3 删除本地的 .git 目录3.4 初始化新的 Git 仓库3.5 添加远程仓库3.6 添加项目文件3.7 提交更改3.8 推送到远程仓库3.9 验证 4. 完整的步骤总结写在最后…...

Ansible入门学习之基础元素介绍

一、Ansible目录结构介绍 1.通过rpm -ql ansible获取ansible所有文件存放的目录 有配置文件目录 /etc/ansible/ 执行文件目录 /usr/bin/ 其中 /etc/ansible/ 该文件目录的主要功能是 inventory主机信息配置&#xff0c;ansible工具功能配置。 ansible自身的配置文件…...

大数据治理实战指南:数据质量、合规与治理架构

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 随着企业数字化转型的加速&#xff0c;大数据已成为驱动业务决策的核心资产。然而&#xff0c;数据治理的缺失或不完善&…...

leetcode_链表 234.回文链表

234.回文链表 给你一个单链表的头节点head&#xff0c;请你判断该链表是否为回文链表。如果是, 返回 true ; 否则, 返回false。思路&#xff1a; 找到中间节点(快慢指针法)反转后半部分的链表比较前半部分和后半部分链表 # Definition for singly-linked list. # class List…...

[Dialog屏幕开发] 屏幕绘制(下拉菜单)

阅读该篇文章之前&#xff0c;可先阅读下述资料 [Dialog屏幕开发] Table Control 列数据操作https://blog.csdn.net/Hudas/article/details/145343731?spm1001.2014.3001.5501https://blog.csdn.net/Hudas/article/details/145343731?spm1001.2014.3001.5501https://blog.cs…...

deepseek v1手机端部署

在iPhone上部署DeepSeekR1 1. 安装快捷指令&#xff1a; 打开iPhone上的Safari浏览器&#xff0c;访问[这个链接](https://www.icloud.com/shortcuts/e0bc5445c39d45a78b90e1dc896cd010)下载快捷指令。 下载后&#xff0c;按照提示完成安装。 2. 获取并配置API Key&a…...

CVPR 2024 无人机/遥感/卫星图像方向总汇(航空图像和交叉视角定位)

1、UAV、Remote Sensing、Satellite Image(无人机/遥感/卫星图像) Unleashing Unlabeled Data: A Paradigm for Cross-View Geo-Localization ⭐codeRethinking Transformers Pre-training for Multi-Spectral Satellite Imagery ⭐codeAerial Lifting: Neural Urban Semantic …...

【信息系统项目管理师-选择真题】2015下半年综合知识答案和详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

Baklib如何结合内容中台与人工智能技术实现数字化转型

内容概要 在当前快速发展的数字环境中&#xff0c;企业面临着转型的紧迫性与挑战&#xff0c;尤其是在内容管理和用户互动的领域。内容中台作为一种集成化的解决方案&#xff0c;不仅能够提高企业在资源管理方面的效率&#xff0c;还能够为企业提供一致性和灵活性的内容分发机…...

JAVAweb学习日记(八) 请数据库模型MySQL

一、MySQL数据模型 二、SQL语言 三、DDL 详细见SQL学习日记内容 四、DQL-条件查询 五、DQL-分组查询 聚合函数&#xff1a; 分组查询&#xff1a; 六、DQL-分组查询 七、分页查询 八、多表设计-一对多&一对一&多对多 一对多-外键&#xff1a; 一对一&#xff1a; 多…...

自动驾驶---苏箐对智驾产品的思考

1 前言 对于更高级别的自动驾驶&#xff0c;很多人都有不同的思考&#xff0c;方案也好&#xff0c;产品也罢。最近在圈内一位知名的自动驾驶专家苏箐发表了他自己对于自动驾驶未来的思考。 苏箐是地平线的副总裁兼首席架构师&#xff0c;同时也是高阶智能驾驶解决方案SuperDri…...

python——Django 框架

Django 框架 1、简介 Django 是用python语言写的开源web开发框架&#xff0c;并遵循MVC设计。 Django的**主要目的是简便、快速的开发数据库驱动的网站。**它强调代码复用&#xff0c;多个组件可以很方便的以"插件"形式服务于整个框架&#xff0c;Django有许多功能…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...