Day10 Liunx高级系统设计11-数据库2

DQL:数据查询语言

查询全表

select * from 表名;

查询指定列

select 列名 1, 列名 2,… from 表名 ;

条件查询

select * from 表名 where 条件 ;
注意:
条件查询就是在查询时给出 WHERE 子句,在 WHERE 子句中可以使用如下运算符及关键
字:
= != <> < <= > >=
BETWEEN…AND ( 等价 <= >=)
IN(set) ( 包含 )
IS NULL ( 非空 )
AND ( 逻辑与 )
OR ( 逻辑或 )
NOT ( 逻辑非 )
XOR ( 逻辑异或 )
示例
-- 查询成绩小于80的学员
select * from stu where score < 80;
-- 查询成绩等于100的学员
select * from stu where score = 100;
-- 查询成绩在85~100的学员
select * from stu where math between 80 and 100;
-- 查询姓名叫做“张三”或者“李四”的所有学生信息。
select * from stu where name beteween "张三" and "李四";
-- 查询成绩不小于80的学员
select * from stu where not score < 80;
-- 查询姓名不叫做“张三”或者“李四”的所有学生信息。
select * from stu where name not beteween "张三" and "李四";
-- 查询姓名叫做“张三”或者“李四”的所有学生信息。
select * from stu where name in ("张三","李四");
-- 查询成绩小于0或大于100的学员
select * from stu where score < 0 or score > 100;
-- 查询性别为空的学员
select * from stu where sex IS NULL;

模糊查询

语法
当想查询姓名中包含 a 字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字
LIKE
_: 任意一个字母
%: 任意 0~n 个字母 ' %'
示例
-- 查找姓名为3个字母的学生信息
select * from stu where name like '___';//注意是3个_,表示匹配3个字符
-- 查找以字母b开头的学生信息
select * from stu where name like 'b%';
正则表达式
MySQL 同样也支持其他正则表达式的匹配, MySQL 中使用 REGEXP 操作符来进行正则
表达式匹配。
示例
-- 查找姓名以 l 开头且以 y 结尾的学生信息
select * from stu where name regexp '^l' and name regexp 'y$' ;        

去重

关键字 :distinct
示例
-- 查询 stu 表中 age 字段,剔除重复行
select distinct age from stu;

计算列

对从数据表中查询的记录的列进行一定的运算之后显示出来
+,-,*,/,%
示例
-- 出生年份 = 当前年份 - 年龄
select stu_name, 2021 -stu_age from stus;

别名

如果在连接查询的多张表中存在相同名字的字段,我们可以使用 表名 . 字段名 来进行区
分,如果表名或字段名太长则不便于 SQL 语句的编写,我们可以使用数据表别名
示例
-- 字段起别名
select name AS 姓名 from stu;
-- 表名起别名
select s.name,s.sex from stu AS s;
-- AS可以省略
select name 姓名 from stu;
select s.name,s.sex from stu s;

排序order by

将查询到的满足条件的记录按照指定的列的值升序 / 降序排列
语法:
select * from 表名 where 条件 order by 列名 asc|desc;
order by 列名 表示将查询结果按照指定的列排序
        asc 按照指定的列升序(默认)
        desc 按照指定的列降序
示例:
# 单字段排序
select * from stu where age>15 order by score desc;
# 多字段排序:先满足第一个排序规则,当第一个排序的列的值相同时再按照第二个列的
规则排序
select * from stus where age>15 order by score asc,age desc;

聚合函数

聚合函数是用来做纵向运算的函数:
COUNT() :统计指定列不为 NULL 的记录行数;
MAX() :计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN() :计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM() :计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0
AVG() :计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0
示例
-- 统计年龄大于20的学员人数
select count(*) as cnt from stu where age>20;
-- 统计学员的总年龄
select sum(age) from stu;
-- 统计学员的平均年龄以及总年龄
select sum(age),avg(age) from stu;
-- 统计学员的最低年龄以及最高年龄
select max(age),min(age) from stu;
-- 计算班级平均分
select avg(score) from stu;

分组查询

分组:就是将数据表中的记录按指定的列进行分组
语法
select 分组字段/聚合函数
from 表名
[where 条件]
group by 分组列名 [having 条件]
[order by 排序字段]
注意
语句执行顺序:
1, 先根据 where 条件从数据库查询记录
2,group by 对查询记录进行分组
3, 执行 having 对分组后的数据进行筛选
4, 排序
示例
-- 先对查询的学生信息按性别进行分组(分成了男、女两组),然后再分别统计每组
学生的个数
select stu_gender,count(stu_num) from stus group by stu_gender;
-- 先对查询的学生信息按性别进行分组(分成了男、女两组),然后再计算每组的平
均年龄
select stu_gender,avg(stu_age) from stus group by stu_gender;
-- 先对学生按年龄进行分组,然后统计各组的学生数量,还可以对最终的结果排序
select stu_age,count(stu_num) from stus group by stu_age order by
stu_age;
-- 查询所有学生,按年龄进行分组,然后分别统计每组的人数,再筛选当前组人数>1
的组,再按年龄升序显示出来
select stu_age,count(stu_num)
from stus
group by stu_age
having count(stu_num)>1
order by stu_age;
-- 查询性别为'男'的学生,按年龄进行分组,然后分别统计每组的人数,再筛选当前组人
数>1的组,再按年龄升序显示出来
select stu_age,count(stu_num)
-> from stus
-> where stu_gender='男'
-> group by stu_age
-> having count(stu_num)>1
-> order by stu_age;

分页查询

语法
select 查询的字段
from 表名
where 条件
limit param1,param2;
注意 :
- param1 :表示获取查询语句的结果中的第一条数据的索引(索引从 0 开始)
- param2 :表示获取的查询记录的条数(如果剩下的数据条数 <param2 ,则返回剩下的
所有记录)
注意
-- 示例
-- 假如 : 对数据表中的学生信息进行分页显示,总共有 10 条数据,我们每页显示 3
-- 总记录数: `count 10`
-- 每页显示: `pageSize 3`
-- 总页数: `pageCount=count%pageSize==0?
count/pageSize:count/pageSize+1`
-- 查询第一页:
select * from stus [ where ...] limit 0 , 3 ; ( 1 - 1 )* 3
-- 查询第二页:
select * from stus [ where ...] limit 3 , 3 ; ( 2 - 1 )* 3
-- 查询第三页:
select * from stus [ where ...] limit 6 , 3 ; ( 3 - 1 )* 3
-- 查询第四页:
select * from stus [ where ...] limit 9 , 3 ; ( 4 - 1 )* 3
-- 如果在一张数据表中:
-- pageNum 表示查询的页码
-- pageSize 表示每页显示的条数
-- 通用分页语句如下:
select * from stus [ where ...] limit (pageNum- 1 )*pageSize,pageSize;

约束

概念

在创建数据表的时候,指定的对数据表的列的数据限制性的要求(对表的列中的数据进行
限制)

作用

- 保证数据的有效性
- 保证数据的完整性
- 保证数据的正确性

分类

- 非空约束( not null ):限制此列的值必须提供,不能为 null
- 唯一约束( unique ):在表中的多条数据,此列的值不能重复
- 主键约束( primary key ):非空 + 唯一,能够唯一标识数据表中的一条数据
- 自增长约束 (auto_increment): 每次 +1, 1
- 检查约束( check ):保证列中的值满足某一条件
- 默认约束( default ):保存数据时 , 未指定值则采用默认值
- 外键约束( foreign key ):建立不同表之间的关联关系

非空约束

含义 : 限制数据表中此列的值必须提供
例子 : 创建图书表 , 设置书名 (book_name) 的不能为空
create table books(
        book_isbn integer ,
        book_isbn char ( 4 ),
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 )
);

唯一约束

含义 : 在表中的多条数据,此列的值不能重复
例子 : 创建图书表 , 设置国籍标准书号 (book_isbn) 的不能重复
create table books(
        book_id integer ,
        book_isbn char ( 4 ) unique ,
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 )
);

检查约束

含义 : 保证列中的值满足某一条件
例子 : 创建用户表时 , 检查年龄在 0~200
方式 1: 创建表时
create table users(
u_id integer ,
u_name varchar ( 30 ),
u_sex char ( 10 ),
u_age int ,
check (u_age >= 0 and u_age <= 200 )
);
注意 :CHECK 子句会被分析,但是会被忽略。
原因 :CREATE TABLE 语法:接受这些子句但又忽略子句的原因是为了提高兼容性,以便更
容易地从其它 SQL 服务器中导入代码,并运行应用程序,创建带参考数据的表。
解决方案 : 枚举或触发器

默认约束

含义 : 保存数据时 , 未指定值则采用默认值
例子 : 创建图书表 , 设置封面地址默认为 xxx
create table books(
book_id integer ,
book_isbn char ( 4 ) unique ,
book_name varchar ( 10 ) not null ,
book_author varchar ( 6 ),
book_img varchar ( 100 ) default 'xxx'
);

主键约束

概念
就是数据表中记录的唯一标识,在一张表中只能有一个主键(主键可以是一个列,也可以
是多个列的组合)
含义 :
当一个字段声明为主键之后,添加数据时:
此字段数据不能为 null
此字段数据不能重复
例子 : 创建图书表 , 设置书籍 id(book_id)
create table books(
        book_id integer primary key ,
        book_isbn char ( 4 ) unique ,
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 )
);
create table books(
        book_id integer ,
        book_isbn char ( 4 ) unique ,
        book_name varchar ( 10 ) not null ,
        book_author varchar ( 6 ),
        primary key (book_id)
);
删除数据表主键约束
# 语法 :alter table 表名 drop primary key;
# :
alter table books drop primary key ;
创建表之后添加主键约束
# 语法 :alter table 表名 modify 字段名 数据类型 primary key;
# :
alter table books modify book_id integer primary key ;

自增长

在我们创建一张数据表时,如果数据表中有列可以作为主键(例如:学生表的学号、图书
表的 isbn )我们可以直接这是这个列为主键;
当有些数据表中没有合适的列作为主键时,我们可以额外定义一个与记录本身无关的列
ID )作为主键,此列数据无具体的含义主要用于标识一条记录,在 mysql 中我们可以将此
列定义为 int ,同时设置为 自动增长 ,当我们向数据表中新增一条记录时,无需提供 ID 列的
值,它会自动生成
定义 int 类型字段自动增长: auto_increment
例子
create table types(
        type_id int primary key auto_increment ,
        type_name varchar ( 20 ) not null ,
        type_remark varchar ( 100 )
);
注意:自动增长从 1 开始,每添加一条记录,自动的增长的列会自定 +1 ,当我们把某条记录
删除之后再添加数据,自动增长的数据也不会重复生成(自动增长只保证唯一性、不保证
连续性)

多表查询

语法: select 列名 1, 列名 2,.. from 1, 2,.. where 判断语句 ;
示例
-- 查看 stu grade 表中的学生学号、姓名、班级、成绩信息
select s.*,g.* from stu s,grade g where s .id = g .stu_id ;
注意
没有条件会出现笛卡尔积

视图:虚拟表

概念

视图,就是由数据库中一张表或者多张表根据特定的条件查询出得数据构造成得虚拟表

优点

安全性:
        如果我们直接将数据表授权给用户操作,那么用户可以CRUD 数据表中所有数据,加
入我们想要对数据表中的部分数据进行保护,可以将公开的数据生成视图,授权用户访
问视图;用户通过查询视图可以获取数据表中公开的数据,从而达到将数据表中的部分
数据对用户隐藏。
简单性:
        如果我们需要查询的数据来源于多张数据表,可以使用多表连接查询来实现;我们
通过视图将这些连表查询的结果对用户开放,用户则可以直接通过查询视图获取多表数
据,操作更便捷。
数据独立:
        一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没
有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

创建视图

CREATE VIEW 视图名称 AS <SELECT语句>

示例

create view view_test1
AS
select * from students

查询视图结构

语法

DESC 视图名称;

示例:

desc view_test1;

修改视图

语法

create OR REPLACE view 视图名称
AS 查询语句
#
alter view 视图名称
AS 查询语句
示例
# 方式1
create OR REPLACE view view_test1
AS
select * from students where stu_gender='女';
# 方式2
alter view view_test1
AS
select * from students where stu_gender='男';

特性

视图是虚拟表,查询视图的数据是来源于数据表的。当对视图进行操作时,对原数据表中的数据是否由影响呢?
查询操作 :如果在数据表中添加了新的数据,而且这个数据满足创建视图时查询语句的条件,通过查询视图也可以查询出新增的数据;当删除原表中满足查询条件的数据时,也会从视图中删除。
新增数据: 如果在视图中添加数据,数据会被添加到原数据表
删除数据: 如果从视图删除数据,数据也将从原表中删除
修改操作: 如果通过修改数据,则也将修改原数据表中的数据
视图的使用建议 : 对复杂查询简化操作,并且不会对数据进行修改的情况下可以使用视图。

触发器

概念

触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行调用
        1、只有每当执行 delete insert update 操作时,才会触发,并执行指定的一条或多条SQL 语句。
        例如:
                可以设置触发器,当删除persons表中 lucy 的信息时,自动删除 grade 表中与lucy相关的信息
        2、触发器常用于保证数据一致,以及每当更新或删除表时,将记录写入日志表

创建触发器

语法:
-- 语法 :
-- 修改 sql 语句结束符为 ||
delimiter ||
-- 创建触发器
create trigger 触发器名 [after|before] [ delete |update|insert] on 表名
for each row
begin
语句 ;
end ||
delimiter ;
old: 老数据
new: 新数据
示例
-- 删除 stu 表中的数据 , 同时删除 grade 表中 stu_id 相同的数据

查看触发器

语法:
show triggers;

删除触发器

drop trigger 触发器名;

c语言操作MySQL

API

注意
1, 需要安装 mysql 相关库 , 安装命令如下
Ubuntu16/18: sudo apt-get install libmysqld-dev
Ubuntu20: sudo apt-get install libmysqlclient-dev
2, 编译时需要加 mysqlclient
gcc 源文件名 .c -l mysqlclient

初始化

所需头文件
#include <mysql/mysql.h>
函数 :
MYSQL *mysql_init(MYSQL *mysql)
描述:
分配或初始化与 mysql_real_connect() 相适应的 MYSQL 对象
参数:
mysql:MYSQL* 句柄
返回值:
初始化的 MYSQL* 句柄。如果无足够内存以分配新的对象,返回 NULL

设置编码

函数 :
int mysql_set_character_set(MYSQL *mysql, const char *csname);
参数 :
mysql:MYSQL* 句柄
csname: 编码格式
:
mysql_set_character_set(&mysql,"utf8");

获取连接

所需头文件
        #include <mysql/mysql.h>
函数 :
        MYSQL *mysql_real_connect(MYSQL *mysql,
                const char *host,
                const char *user,
                const char *passwd,
                const char *db,
                unsigned int port,
                const char *unix_socket,
                unsigned long client_flag);
描述 :
        mysql_real_connect()尝试与运行在主机上的 MySQL 数据库引擎建立连接。
参数 :
        mysql:MySQL句柄
        host:“host”的值必须是主机名或 IP 地址 . 如果 “host” NULL 或字符串"localhost" ”127.0.0.1” ,连接将被视为与本地主机的连接 .
        user:MySQL登录的用户名
        passwd: MySQL登录的密码
        db:数据库名称
        port:MySQL服务器监听客户端连接到来的端口号(默认: 3306
        unix_socket:如果 unix_socket 不是 NULL ,该字符串描述了应使用的套接字或命名管道(默认为NULL)
        client_flag: 通常为 0 ,可以更改其值,以允许特定功能(详情见手册)
返回值:
        如果连接成功,返回MYSQL* 连接句柄。返回值与第 1 个参数的值相同。
        如果连接失败,返回NULL

执行SQL语句

无操作结果 : 如建库 , 建表 , 增加 , 删除 , 修改等语句
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        int mysql_real_query(MYSQL *mysql,const char * query,unsigned long length)
描述 :
        执行由“query” 指向的 SQL 查询 , 它应是字符串长度字节 “long”. 正常情况下 , 字符串必须包含1 SQL 语句 , 而且不应为语句添加终结分号( ‘;’ )或 “\g”. 如果允许多语句执行, 字符串可包含由分号隔开的多条语句 .
参数 :
        mysql:MySQL句柄
        query:需要执行的 MySQL 语句
        length:需要执行的 MySQL 语句的长度
返回值 :
        如果查询成功,返回0
        如果查询失败,返回非0
有操作结果 : 如查询语句
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        MYSQL_RES *mysql_store_result(MYSQL *mysql)
描述:
        对于成功检索了数据的每个查询(SELECT SHOW DESCRIBE EXPLAIN CHECK
TABLE 等),必须调 用 mysql_store_result() mysql_use_result() 。 对于其他查询,不需要调用mysql_store_result() mysql_use_result() ,但是如果在任何情况下均调用 mysql_store_result() ,它也不会导致任何伤害或性能降低。通过检查mysql_store_result() 是否返回 0 ,可检测查询 是否没有结果集(以后会更多)
参数 :
        Mysql:MySQL句柄
返回值 :
        成功 返回具有多个结果的MYSQL_RES 结果集合。
        失败 返回NULL

查询结果集

获取结果集中的列数
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        unsigned int mysql_num_fields(MYSQL_RES *result)
描述 :
        返回结果集中的列数
参数 :
        result:MYSQL_RES结果集句柄
返回值 :
        表示结果集中行数的无符号整数
获取结果集中的行数
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        my_ulonglong mysql_num_rows(MYSQL_RES *result)
描述 :
        返回结果集中的行数
参数 :
        result:MYSQL_RES结果集句柄
返回值 :
        结果集中的行数
获取结果集中的列名称
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result)
描述 :
        返回采用MYSQL_FIELD 结构的结果集的列。重复调用该函数,以检索关于结果集中所有列的信息。未剩余字段时,mysql_fetch_field() 返回 NULL
参数 :
        result:MYSQL_RES结果集句柄
返回值 :
        当前列的MYSQL_FIELD 结构。如果未剩余任何列,返回 NULL
获取结果集中的每行的数据(重要)
所需头文件 :
        #include <mysql/mysql.h>
函数 :
        MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
描述 :
        检索结果集的下一行。在mysql_store_result() 之后使用时,如果没有要检索的行,mysql_fetch_row() 返回 NULL
参数 :
        MYSQL_RES结果集句柄
返回值 :
        下一行的MYSQL_ROW 结构。如果没有更多要检索的行或出现了错误,返回 NULL

释放资源

释放结果集

所需头文件 :
        #include <mysql/mysql.h>
函数 :
        void mysql_free_result(MYSQL_RES *result)
描述 :
        释放由mysql_store_result() mysql_use_result() mysql_list_dbs() 等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result() 释放结果集使用的内存
参数 :
        MYSQL_RES结果集句柄
返回值 :
        无

释放MySQL句柄

所需头文件 :
        #include <mysql/mysql.h>
函数 :
        void mysql_close(MYSQL *mysql)
描述 :
        关闭前面打开的连接。如果句柄是由mysql_init() mysql_connect() 自动分配的,mysql_close() 还将解除分配由 mysql 指向的连接句柄
参数 :
        MySQL连接句柄
返回值 :
        无
示例DML
#include <stdio.h>
#include <mysql/mysql.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{MYSQL mysql;mysql_init(&mysql);mysql_set_character_set(&mysql,"UTF8");MYSQL *tag  = mysql_real_connect(&mysql,"10.12.152.71","root","027027","mtdata",3306,NULL,0);if(tag == NULL){printf("连接失败\n");return 0;}else{printf("连接成功\n");}//执行sql语句
char *sql_str = "select *from user";
mysql_query(&mysql,sql_str);
MYSQL_RES *res = mysql_store_result(&mysql);
if(res == NULL)
{printf("为空\n");return 0;
}
int column = mysql_num_fields(res);
int row = mysql_num_rows(res);
for(int i = 0;i < row;i++)
{MYSQL_ROW row_data= mysql_fetch_row(res);for(int j=0;j < column;j++){printf("%s\t",row_data[j]);}printf("\n");
}
mysql_free_result(res);return 0;
}

示例DQL

#include <stdio.h>
#include <mysql/mysql.h>
int main(int argc, char const *argv[])
{/*总结步骤:执行dql的步骤1,定义MYSQL结构体变量2,初始化MYSQL结构体变量 mysql_init3,设置编码格式:mysql_set_character_set4,打开mysql连接:mysql_real_connect5,执行sql语句:mysql_query6,获取查找的结果集7,通过步骤5的返回值,获取查询到的数据mysql_num_rows:获取结果集中的行数mysql_num_fields:获取结果集中的列数mysql_fetch_field:获取列名mysql_fetch_row:获取每一行的数据8,关闭结果集:mysql_free_result9,关闭连接:mysql_close*/MYSQL mysql;mysql_init(&mysql);mysql_set_character_set(&mysql,"utf8");MYSQL *tag  =  mysql_real_connect(&mysql,"10.12.152.71","root","027027","mtdata",3306,NULL,0);if(tag == NULL){printf("连接失败\n");}elseprintf("连接成功\n");char sql[] = "select * from user";mysql_query(&mysql,sql);MYSQL_RES *res = mysql_store_result(&mysql);int row = mysql_num_rows(res);printf("row = %d\n",row);int lie = mysql_num_fields(res);printf("lie = %d\n",lie);for (int i = 0; i < row; i++){//获取一行的数据MYSQL_ROW r = mysql_fetch_row(res);for (int j = 0; j < lie; j++){char * str = r[j];printf("%s\t",str);}printf("\n");}mysql_free_result(res);mysql_close(&mysql);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux笔记--VSCode利用交换机跳转服务器

目录 1--前言 2--VSCode设置 3--ssh连接 1--前言 博主学校的服务器有两个&#xff0c;其中一个服务器&#xff08;14&#xff09;可以通过挂内网VPN来进行连接&#xff0c;但另一个服务器&#xff08;15&#xff09;即使挂了VPN也不能连接&#xff0c;只能通过内网进行连接。…

ripro后台登录后转圈和图标不显示的原因及解决方法

最近&#xff0c;好多小伙伴使用ripro主题的小伙伴们都发现&#xff0c;登录后台后&#xff0c;进入主题设置就转圈&#xff0c;等待老半天后好不容易显示页面了&#xff0c;却发现图标不显示了&#xff0c;都统一显示为方框。 这是因为后台的js、css这类静态资源托管用的是js…

力扣刷题-二叉树-找树左下角的值

513 找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1&#xff1a; 示例 2&#xff1a; 思路 层序遍历 直接层序遍历&#xff0c;因为题目说了是最底层&#xff0c;最左边的值&a…

紫光FPGA DDR3 IP使用和注意事项(axi4协议)

紫光DDR3 IP使用 对于紫光ddr3 IP核的使用需要注意事情。 阅读ddr ip手册&#xff1a; 1、注意&#xff1a;对于写地址通道&#xff0c;axi_awvalid要一直拉高&#xff0c;axi_awready才会拉高。使用的芯片型号时PG2L100H-6FBG676&#xff0c;不同的型号IP核接口和axi的握手协…

IDEA2020关于Cannot resolve symbol ‘servlet‘报错

刚开始也配置了tomcat&#xff0c;但是依然报错&#xff0c;后来查找资料解决了 在项目下面创建一个libs文件夹&#xff0c;然后将tomcat / lib文件夹中的servlet-api.jar复制了过来&#xff0c;然后再添加到library。 具体操作步骤&#xff1a;

Code automatic processing

自动化处理没啥用的代码&#xff0c;测试下&#xff0c;还不错的感觉

Elasticsearch的使用总结

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。 put/post请求&#xff1a;http://localhost:9200/索引库名称 {"settings":{"index":{"number_of_shards":1, # 分片数量…

风速预测(三)EMD-LSTM-Attention模型

目录 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集&#xff0c;按照8&#xff1a;2划分训练集和测试集 2.2 设置滑动窗口大小为7&#xff0c;制作数据集 3 基于Pytorch的EMD-LSTM-Attention模型预测 3.1 数据加载&#…

uniapp怎么获取微信步数

微信步数获取的背景 微信步数是指用户在微信运动中记录的步数数据。微信提供了开放能力&#xff0c;允许第三方应用获取用户授权后的微信步数数据&#xff0c;以便进行进一步的数据分析和展示。使用时报错&#xff1a;fail api scope is not declared in the privacy agreemen…

libevent服务GET/POST的简单使用

目录 1、前言2、测试demo2.1、目录结构2.2、 测试源码2.2.1、http_server.cpp2.2.2、 http_server.h 2.3、 编译2.4、 运行结果2.4.1、测试POST2.4.2 、测试GET请求 1、前言 项目开发中经常需要使用到私有协议和Qt,Android等GUI前端通信&#xff0c;比较常用的使用POST和GET方式…

计算机操作系统-第十八天

目录 进程调度时机 补充知识 进程调度的方式 非剥夺调度方式 剥夺调度方式 进程的切换与过程 本节思维导图 进程调度时机 进程调度&#xff08;低级调度&#xff09;&#xff0c;即按照某种算法从就绪队列中选择一个进程为其分配处理机。 共有两种需要进行进程调度与…

基于junit4搭建自定义的接口自动化测试框架

随着业务的逐步稳定&#xff0c;对于接口的改动也会逐渐变少。更多的是对业务逻辑的优化&#xff0c;功能实现的完善。对于测试来说&#xff0c;重复繁琐的功能测试不仅效率低下&#xff0c;而且耗费一定的人力资源。笔者支持的信息流业务下的一个图文管理平台就是一个功能较为…

Lambda表达式的简单理解

1. 初识lambda表达式 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式&#xff08;Lambda exp…

广州华锐互动:VR煤矿特殊工种作业实训帮助提高矿工的操作技能和安全意识

VR煤矿特殊工种作业实训系统为煤矿企业培训提供了全方位的支持&#xff0c;帮助提高矿工的操作技能和安全意识&#xff0c;促进煤矿企业的安全生产。 首先&#xff0c;VR煤矿特殊工种作业实训系统可以提供逼真的虚拟操作环境&#xff0c;使矿工能够身临其境地感受各种工种的作业…

计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等

文章目录 1 网络层的两个层面2 网络协议IP2.1 虚拟互联网络2.2 IP地址2.2.1 固定分类编址方式2.2.2 无分类编制CIDR2.2.3 MAC地址和IP地址区别 2.3 地址解析协议ARP2.3.1 解析过程 2.4 IP数据报格式 3 IP层转发分组流程4 国际控制报文协议ICMP4.1 ICMP格式结构4.2 分类4.2.1 差…

学习MS Dynamics AX 2012编程开发 2. X++语言

X是用于构建Dynamics AX功能的编程语言。X是一种与C类似的面向对象编程语言。 完成本章后&#xff0c;您将能够理解X语言&#xff1b;您将知道可用的数据类型是什么&#xff0c;如何创建各种循环&#xff0c;如何比较和操作变量&#xff0c;在哪里可以找到预定义的函数&#x…

【Android逆向】记录一次某某虚拟机的逆向

导语 学了一段时间的XPosed&#xff0c;发现XPosed真的好强&#xff0c;只要技术强&#xff0c;什么操作都能实现... 这次主要记录一下我对这款应用的逆向思路 apk检查 使用MT管理器检查apk的加壳情况 发现是某数字的免费版本 直接使用frida-dexdump 脱下来后备用 应用分…

二叉树前,中序推后续_中,后续推前序

文章目录 介绍思路例子 介绍 二叉树是由根、左子树、右子树三部分组成。 二叉树的遍历方式又可以分为前序遍历&#xff0c;中序遍历&#xff0c;后序遍历。 前序遍历&#xff1a;根&#xff0c;左子树&#xff0c;右子树 中序遍历&#xff1a;左子树&#xff0c;根&#xff0…

菜鸟学习日记(python)——匿名函数

Python 使用 lambda 来创建匿名函数。 lambda 函数是一种小型、匿名的内联函数&#xff0c;它可以具有任意数量的参数&#xff0c;但只能有一个表达式。 匿名函数的一般格式如下&#xff1a; lambda 参数列表:表达式 表达式用于计算并返回函数结果 lambda 函数通常用于编写…

FreeRtos里的几个中断屏蔽

1、primask 寄存器 PRIMASK用于禁止除NMI和HardFalut外的所有异常和中断&#xff0c;使用方法&#xff1a; cpsid i &#xff1b; //设置primask &#xff08;禁止中断&#xff09; cpsie i ; //清除primask (使能中断) 也可以 movs r0,#1 msr primask r0; //将 1写入p…