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

MySQL数据库入门

目录

前言

一、安装软件

二、普通指令使用

三、MySQL接口API相关函数

1、API函数使用步骤

2、mysql_init-MYSQL对象初始化

3、mysql_real_connect()——数据库引擎建立连接

4、mysql_close()——关闭数据库连接

 5、mysql_query()——查询数据库某表内容

6、mysql_store_result()——向客户端检索完整的结果集

7、mysql_num_fields()——获取字段数量(列数)

8、mysql_free_result()——释放结果集使用的内存

9、mysql_fetch_row()——从结果集中获取下一行

四、使用C语言连接MySQL

五、使用示例

5.1、连接初始化

5.2、构造指令


前言

本博文是学习基于Linux+STM32+esp8266的超级智能无人超市项目里面所需要的一小些数据库使用,本博文便于学习这个项目的数据库部分,可以根据后面的最后一个使用实例来练习数据库的连接,表的删除和更正、查询!

一、安装软件

在电脑不同系统上安装使用MYSQL可以看这个视频:一小时MYSQL

二、普通指令使用

1、终端进入MYSQL:

mysql -u root -p

然后输入密码即可进入

 2、创建数据库

我们可以先查询一下已经有的数据库:

show databases;

创建数据库:

CREATE DATABASE test;

test:数据库名字 

指定使用哪个数据库:

use test;

创建表:

CREATE TABLE users(id VARCHAR(20) unique key,name VARCHAR(50),phone VARCHAR(15) unique key,balance VARCHAR(25),text VARCHAR(1000));

users:表名

 查询表:

desc users;     users:表名

退出MySQL:

exit; 

插入操作:

"INSERT INTO me(pid, pname,price,brand) VALUES('123','lll','100','ddd')";

me:表名

查询操作:

"SELECT * FROM me"; 

me:表名

 删除操作:

DELETE FROM me where name=0;

me:表名

删除me表中name为0的成员

删除全部成员:TRUNCATE TABLE usr;

usr:表名

更改操作:

UPDATE me set name = 0 where price = 100;

me:表名

将price为100的成员的name更改为0

三、MySQL接口API相关函数

1、API函数使用步骤

1,首先需要 mysql的头文件,并链接MQSQL动态库。

#include <mysql.h>

2、创建MYSQL变量

MYSQL mysql;

3、mysql_init初始化MYSQL变量

4、调用mysql_real_connect函数连接Mysql数据库

5、调用mysql_real_query函数进行数据库查询

6、通过调用mysql_store_result或mysql_use_result函数返回的MYSQL_RES变量获取查询结果数据。

7、调用mysql_fetch_row函数读取结果集数据。

8、结果集用完后,调用mysql_free_result函数释放结果集,以防内存泄露
9、不再查询Mysql数据库时,调用mysql_close函数关闭数据库连接

2、mysql_init-MYSQL对象初始化

MYSQL *mysql_init(MYSQL *mysql) 

返回值:

  • 初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。 错误,在内存不足的情况下,返回NULL。

说明:

  • 如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。

  • 否则,将初始化对象,并返回对象的地址。

  • 如果mysql_init()分配了新的对象,应当在程序中调用mysql_close() 来关闭连接,以释放对象

3、mysql_real_connect()——数据库引擎建立连接

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*连接句柄。
  • 如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。

参数说明:

  • mysql:前面定义的MYSQL变量;
  • host:MYSQL服务器的地址;
    • 如果“host”是NULL或字符串"localhost",连接将被视为与本地主机的连接。
    • 如果操作系统支持套接字(Unix)或命名管道(Windows),将使用它们而不是TCP/IP连接到服务器。
  • user:登录用户名;
    • 如果“user”是NULL或空字符串"",用户将被视为当前用户。在UNIX环境下,它是当前的登录名。
  • passwd:登录密码;
  • db:要连接的数据库,如果db为NULL,连接会将默认的数据库设为该值。
  • port:MYSQL服务器的TCP服务端口;
    • 如果“port”不是0,其值将用作TCP/IP连接的端口号。注意,“host”参数决定了连接的类型。
  • unix_socket:unix连接方式。
    • 如果unix_socket不是NULL,该字符串描述了应使用的套接字或命名管道。注意,“host”参数决定了连接的类型。
  • clientflag:Mysql运行为ODBC数据库的标记,一般取0。

4、mysql_close()——关闭数据库连接

void mysql_close(MYSQL *mysql) 

 5、mysql_query()——查询数据库某表内容

查询数据库中的某一个表内容,通过函数mysql_query()来实现

int mysql_query(MYSQL *mysql, const char *query) 
//query为执行的SQL语句对应的字符长串

返回值

  • 如果查询成功,返回0。如果出现错误,返回非0值。

使用说明:

  • 执行由“Null终结的字符串”查询指向的SQL查询。
  • 正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行,字符串可包含多条由分号隔开的语句。(“多查询执行的C API处理”)
  • mysql_query()不能用于包含二进制数据的查询,应使用mysql_real_query()取而代之(二进制数据可能包含字符‘\0’mysql_query()会将该字符解释为查询字符串结束)。
  • 如果希望了解查询是否应返回结果集,可使用mysql_field_count()进行检查。
  • 查询成功则该函数返回0。

使用实例:

// 执行操作 SQL 语句(INSERT/UPDATE/DELETE)
bool SQLifconfig_Dml_sql(SQLifconfig *config, const char *sqlstr) {printf("sql: %s\n", sqlstr);// 开始事务if (mysql_query(config->mysql, "BEGIN")) {printf("query_error: %s\n", mysql_error(config->mysql));return false;}// 执行 SQL 语句if (mysql_query(config->mysql, sqlstr)) {printf("query_error: %s\n", mysql_error(config->mysql));return false;}// 提交事务if (mysql_query(config->mysql, "COMMIT")) {printf("query_error: %s\n", mysql_error(config->mysql));return false;}return true;
}

6、mysql_store_result()——向客户端检索完整的结果集

显示查询数据库中数据表的内容,mysql_store_result()mysql_query()查询的全部结果读取到客户端,分配1个MYSQL_RES结构(上面有介绍),并将结果置于该结构中

MYSQL_RES *mysql_store_result(MYSQL *mysql) 

返回值

具有多个结果的MYSQL_RES结果集合。如果出现错误,返回NULL。

使用说明:

  • 对于成功检索了数据的每个查询(SELECT、SHOW、DESCRIBE、EXPLAIN、CHECK TABLE等),必须调用mysql_store_result()mysql_use_result() 。
  • 如果希望了解查询是否应返回结果集,可使用mysql_field_count()进行检查。
  • 如果查询未返回结果集,mysql_store_result()将返回Null指针(例如,如果查询是INSERT语句)。
  • 如果读取结果集失败,mysql_store_result()还会返回Null指针。通过检查mysql_error()是否返回非空字符串mysql_errno()是否返回非0值,或mysql_field_count()是否返回0,可以检查是否出现了错误。
  • 如果未返回行,将返回空的结果集。(空结果集设置不同于作为返回值的空指针)。
  • 一旦调用了mysql_store_result()并获得了不是Null指针的结果,可调用mysql_num_rows()来找出结果集中的行数
  • 可以调用mysql_fetch_row()来获取结果集中的行,或调用mysql_row_seek()mysql_row_tell()来获取或设置结果集中的当前行位置
  • 一旦完成了对结果集的操作,必须调用mysql_free_result()。

7、mysql_num_fields()——获取字段数量(列数)

int mysql_num_fields(MYSQL_RES *result) 

8、mysql_free_result()——释放结果集使用的内存

释放由mysql_store_result()mysql_use_result()mysql_list_dbs()等为结果集分配的内存。完成对结果集的操作后,必须调用mysql_free_result()释放结果集使用的内存。

void mysql_free_result(MYSQL_RES *result) 

9、mysql_fetch_row()——从结果集中获取下一行

MYSQL_ROW mysql_fetch_row(MYSQL_RES* result)
//MYSQL_ROW开篇已经说明,char ** 类型

返回值

  • 下一行的MYSQL_ROW结构。如果没有更多要检索的行或出现了错误,返回NULL。

使用说明:

  • mysql_store_result()之后使用时,如果没有要检索的行,mysql_fetch_row()返回NULL。
  • mysql_use_result()之后使用时,如果没有要检索的行或出现了错误,mysql_fetch_row()返回NULL。
  • 行内值的数目由mysql_num_fields(result)给出。如果行中保存了调用mysql_fetch_row()返回的值,将按照row[0]row[mysql_num_fields(result)-1],访问这些值的指针。
  • 可以通过调用mysql_fetch_lengths()来获得行中字段值的长度。对于空字段以及包含NULL的字段,长度为0。通过检查字段值的指针,能够区分它们。如果指针为NULL,字段为NULL,否则字段为空。

四、使用C语言连接MySQL

下面我们使用C语言来写函数来连接和使用MySQL

sql_connect.c:

#include "sql_connect.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 初始化数据库连接对象
SQLifconfig* SQLifconfig_init() {SQLifconfig *config = (SQLifconfig*)malloc(sizeof(SQLifconfig));if (!config) return NULL;// 初始化成员变量config->mysql = NULL;config->row = NULL;config->result = NULL;config->field = NULL;// 初始化 MySQL 连接config->mysql = mysql_init(NULL);//参数为NULL,函数将分配初始化,并初始化、返回新对象if (!config->mysql) {printf("Init Error: %s\n", mysql_error(config->mysql));free(config);return NULL;}// 强制设置字符集if (mysql_options(config->mysql, MYSQL_SET_CHARSET_NAME, "utf8mb4")) {printf("Set UTF-8 Error: %s\n", mysql_error(config->mysql));mysql_close(config->mysql);free(config);return NULL;}return config;
}// 释放数据库连接对象
void SQLifconfig_destroy(SQLifconfig *config) {if (config) {if (config->mysql) {mysql_close(config->mysql);//关闭数据库连接}free(config);//释放空间}
}// 初始化数据库连接
bool SQLifconfig_SQL_init(SQLifconfig *config, const char *host, const char *user, const char *pwd, const char *dbname) {if (!mysql_real_connect(config->mysql, host, user, pwd, dbname, 3306, NULL, 0)) {printf("connect error: %s\n", mysql_error(config->mysql));return false;}return true;
}// 执行操作 SQL 语句(INSERT/UPDATE/DELETE)
bool SQLifconfig_Dml_sql(SQLifconfig *config, const char *sqlstr) {printf("sql: %s\n", sqlstr);// 开始事务if (mysql_query(config->mysql, "BEGIN")) {printf("query_error: %s\n", mysql_error(config->mysql));return false;}// 执行 SQL 语句if (mysql_query(config->mysql, sqlstr)) {printf("query_error: %s\n", mysql_error(config->mysql));return false;}// 提交事务if (mysql_query(config->mysql, "COMMIT")) {printf("query_error: %s\n", mysql_error(config->mysql));return false;}return true;
}// 执行查询 SQL 语句(SELECT)
char* SQLifconfig_Dql_sql(SQLifconfig *config, const char *sqlstr) {// 执行 SQL 查询if (mysql_query(config->mysql, sqlstr)) {printf("query_error: %s\n", mysql_error(config->mysql));return NULL;}// 获取查询结果集config->result = mysql_store_result(config->mysql);if (!config->result) {return NULL; // 无结果或错误}// 获取字段数量(列数)int fieldnum = mysql_num_fields(config->result);// 初始化动态缓冲区size_t total_len = 1024; // 初始缓冲区大小char *buffer = (char*)malloc(total_len);if (!buffer) {mysql_free_result(config->result);return NULL; // 内存分配失败}buffer[0] = '\0'; // 初始化空字符串// 遍历结果集的每一行while ((config->row = mysql_fetch_row(config->result))) {// 计算当前行所需的总长度size_t row_len = 0;for (int j = 0; j < fieldnum; j++) {row_len += strlen(config->row[j] ? config->row[j] : "NULL") + 1; // 字段值 + 分隔符}// 动态扩展缓冲区(如果当前缓冲区不足以容纳新行)size_t current_len = strlen(buffer);if (current_len + row_len + 2 > total_len) {total_len += row_len + 2; // 扩展缓冲区大小char *new_buf = realloc(buffer, total_len);if (!new_buf) {free(buffer);mysql_free_result(config->result);return NULL; // 内存分配失败}buffer = new_buf;}// 拼接当前行的字段值for (int j = 0; j < fieldnum; j++) {const char *val = config->row[j] ? config->row[j] : "NULL"; // 处理 NULL 值strcat(buffer, val); // 追加字段值strcat(buffer, "#"); // 追加分隔符}buffer[strlen(buffer)-1] = '\n'; // 将最后一个#替换为换行符}// 释放结果集内存mysql_free_result(config->result);// 检查是否有有效数据if (strlen(buffer) == 0) {free(buffer);return NULL; // 无数据}// 返回格式化后的字符串return buffer;
}

sql_connect.h:

#ifndef __SQL_CONNECT_H
#define __SQL_CONNECT_H#include <mysql.h>
#include <stdbool.h>// 数据库连接结构体
typedef struct {MYSQL *mysql;       // MySQL 连接对象MYSQL_ROW row;      // 当前行数据MYSQL_RES *result;  // 查询结果集MYSQL_FIELD *field; // 字段信息
} SQLifconfig;// 初始化数据库连接
SQLifconfig* SQLifconfig_init();// 释放数据库连接
void SQLifconfig_destroy(SQLifconfig *config);// 初始化数据库连接
bool SQLifconfig_SQL_init(SQLifconfig *config, const char *host, const char *user, const char *pwd, const char *dbname);// 执行查询 SQL 语句(SELECT)
char* SQLifconfig_Dql_sql(SQLifconfig *config, const char *sqlstr);// 执行操作 SQL 语句(INSERT/UPDATE/DELETE)
bool SQLifconfig_Dml_sql(SQLifconfig *config, const char *sqlstr);#endif

五、使用示例

5.1、连接初始化

建立两个表,并且数据库名为shopping,后面的实验都会围绕这两个表进行实验:

CREATE DATABASE shopping;CREATE TABLE users(
id VARCHAR(20) unique key,
name VARCHAR(50),
phone VARCHAR(15) unique key,
balance VARCHAR(25),
text VARCHAR(1000)
)CREATE TABLE me(
pid VARCHAR(20) unique key,
pname VARCHAR(50),
price VARCHAR(15),
brand VARCHAR(25)
)
SQLifconfig *MySQL_Handler;int main() 
{// 初始化数据库连接对象MySQL_Handler = SQLifconfig_init();if (!MySQL_Handler) {printf("初始化数据库失败\n");return -1;}// 连接数据库                                                               //数据库名字if (!SQLifconfig_SQL_init(MySQL_Handler, "127.0.0.1", "root", "123456", "shopping")) {printf("连接数据库失败\n");SQLifconfig_destroy(MySQL_Handler);return -1;}}

5.2、构造指令

下面就是一些项目中所使用到的指令,可能有一些没有写,不过应该是都写了,类似相同的就不写了!

/* 删除me表中的pid为str的成员 */
// 构造 SQL 删除语句
sprintf(buf, "DELETE FROM me WHERE pid='%s'", str);
// 执行 SQL 删除操作
int result = SQLifconfig_Dml_sql(MySQL_Handler, buf);/* 查询users表中phone为str的成员的id, name, phone, balance */
sprintf(buf, "SELECT id, name, phone, balance FROM users WHERE phone='%s'", str);
// 执行查询
char* ret = SQLifconfig_Dql_sql(MySQL_Handler, buf);/* 更新users表中的ide为pid的成员的balance ,修改为balance+num */
sprintf(buf, "UPDATE users SET balance = balance + %d WHERE id='%s'", num, pid);
if (SQLifconfig_Dml_sql(MySQL_Handler, buf)) /* 删除users表中的所有成员 */
SQLifconfig_Dml_sql(MySQL_Handler, "TRUNCATE TABLE users"))/* 可以用来练习 *///执行插入操作                         //表名const char *insert_sql = "INSERT INTO users(id, name,phone,balance) VALUES('888','hxy','666',100)";if (SQLifconfig_Dml_sql(MySQL_Handler, insert_sql)) {// 执行操作 SQL 语句(INSERT/UPDATE/DELETE)printf("插入成功\n");} else {printf("插入失败\n");}insert_sql = "INSERT INTO me(pid, pname,price,brand) VALUES('888','hxy','666',100)";if (SQLifconfig_Dml_sql(MySQL_Handler, insert_sql)) {// 执行操作 SQL 语句(INSERT/UPDATE/DELETE)printf("插入成功\n");} else {printf("插入失败\n");}// 执行查询操作                        //表名     const char *select_sql = "SELECT * FROM users";char *result = SQLifconfig_Dql_sql(MySQL_Handler, select_sql);// 执行查询 SQL 语句(SELECT)if (result) {printf("查询结果:\n%s", result);free(result); // 必须手动释放内存} else {printf("查询失败或无结果\n");}select_sql = "SELECT * FROM me";result = SQLifconfig_Dql_sql(MySQL_Handler, select_sql);// 执行查询 SQL 语句(SELECT)if (result) {printf("查询结果:\n%s", result);free(result); // 必须手动释放内存} else {printf("查询失败或无结果\n");}

相关文章:

MySQL数据库入门

目录 前言 一、安装软件 二、普通指令使用 三、MySQL接口API相关函数 1、API函数使用步骤 2、mysql_init-MYSQL对象初始化 3、mysql_real_connect()——数据库引擎建立连接 4、mysql_close()——关闭数据库连接 5、mysql_query()——查询数据库某表内容 6、mysql_stor…...

SpringBoot集成Couchbase开发与实践

1 前言 1.1 什么是Couchbase Couchbase 是一个高性能的 NoSQL 数据库,支持文档存储、内存缓存和分布式计算。它结合了内存数据库的速度和灵活性与传统数据库的持久性和查询能力。 1.2 Couchbase的特点与优势 高性能:利用内存缓存加速数据访问。可扩展性:支持水平扩展,能…...

一周掌握Flutter开发--8. 调试与性能优化(上)

文章目录 8. 调试与性能优化核心技能8.1 使用 Flutter DevTools 分析性能8.2 检查 Widget 重绘&#xff08;debugPaintSizeEnabled&#xff09;8.3 解决 ListView 卡顿&#xff08;ListView.builder itemExtent&#xff09; 其他性能优化技巧8.4 减少 build 方法的调用8.5 使用…...

动态路由机制MoE专家库架构在多医疗AI专家协同会诊中的应用探析

随着医疗人工智能技术的飞速进步,AI在医学领域的应用日益增多,尤其是在复杂疾病的诊断和治疗中,AI技术的应用带来了巨大的潜力。特别是动态路由机制混合专家(Mixture of Experts,MoE)架构,因其灵活、高效的特点,正逐渐成为实现多AI专家协同会诊的关键技术。通过将多个不…...

Linux上位机开发实践(开源框架和开源算法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 做嵌入式软件开发&#xff0c;如果软件本身比较简单&#xff0c;只是图形界面显示&#xff0c;那么相关的开发工作并不难。最主要的内容也就是数据…...

算法时间复杂度分析

1. 基本概念 大 O 符号 O(f(n)) 表示算法的最坏情况复杂度&#xff0c;即算法在最不利情况下所需的基本操作数不会超过 O(f(n))的级别。例如&#xff0c;表示当输入规模 n 增大时&#xff0c;算法运行时间上界是某个常数乘以 。 Ω 符号 Ω(f(n)) 表示算法的下界&#xff0c;即…...

数据库基础知识点(系列五)

创建表&#xff0c;设置约束&#xff0c;修改表&#xff0c;删除表&#xff0c;表中数据的操作(insert,修改&#xff0c;删除) 1&#xff0e;在第5章习题创建的 “仓库库存”数据库中完成下列操作。 (1)创建“商品”表&#xff0c;表结构如表6-4&#xff1a; 表6-4 “goods”…...

C++中使用ShellExecute函数调用其他窗口程序时,参数设置为隐藏,后续能通过发消息给这个被调用程序显示,能显示出来窗口吗

文章目录 一、可行性分析二、实现步骤1. 启动程序并隐藏窗口2. 获取目标窗口句柄3. 发送消息显示窗口方法1&#xff1a;发送WM_SHOWWINDOW方法2&#xff1a;发送WM_SYSCOMMAND恢复窗口方法3&#xff1a;直接调用ShowWindow&#xff08;推荐&#xff09; 三、代码示例四、关键注…...

使用 AI 生成 页面

当前使用的是 火山引擎 提供的 deepseek-v3-241226 思考 如何让AI可以按自己的想法一步步生成页面&#xff1f; 我们要把要生成的内容分段的给到它&#xff0c;让它按步聚完成。 如生成一个列表页 依据所定义的接口。生成API依赖定义接口 生成 状态管理模块依赖上状态管理…...

【人工智能】机器学习中的评价指标

机器学习中的评价指标 在机器学习中&#xff0c;评估指标&#xff08;Evaluation Metrics&#xff09;是衡量模型性能的工具。选择合适的评估指标能够帮助我们更好地理解模型的效果以及它在实际应用中的表现。 一般来说&#xff0c;评估指标主要分为三大类&#xff1a;分类、…...

shell脚本运行方式 bash 和./区别

在 Linux 或 macOS 这类基于 Unix 的系统里&#xff0c;使用 ./ 运行脚本和使用 bash 运行脚本存在一些差异&#xff0c;下面为你详细说明&#xff1a; 1. 语法与使用方式 使用 ./ 运行脚本&#xff1a; 若要使用 ./ 来运行脚本&#xff0c;需要确保脚本文件具备可执行权限&a…...

ShardingSphere+达梦数据库分表操作

背景 随着数字经济时代的全面到来&#xff0c;数据量呈现爆炸式增长&#xff0c;传统单机数据库在性能、扩展性和可用性方面面临严峻挑战。分布式数据库技术应运而生&#xff0c;成为解决海量数据存储与处理的关键方案。在这一背景下&#xff0c;Apache ShardingSphere作为一款…...

WordPress上传图片时显示“未提供数据”错误

在WordPress中上传图片时显示“未提供数据”的错误&#xff0c;通常是由多种原因引起的&#xff0c;以下是一些常见的问题及其解决方法&#xff1a; 1. 文件权限问题 WordPress需要正确的文件和目录权限才能正常上传图片。如果权限设置不正确&#xff0c;可能会导致无法上传图…...

AP CSA FRQ Q2 Past Paper 五年真题汇总 2023-2019

Author(wechat): bigshuang2020 ap csa tutor, providing 1-on-1 tutoring. 国际教育计算机老师, 擅长答疑讲解&#xff0c;带学生实践学习。 热爱创作&#xff0c;作品&#xff1a;ap csa原创双语教案&#xff0c;真题梳理汇总&#xff0c; AP CSA FRQ专题冲刺, AP CSA MCQ小题…...

海量数据场景题--查找两个大文件的URL

查找两个大文件共同的URL 给定 a、b 两个文件&#xff0c;各存放 50 亿个 URL&#xff0c;每个 URL 各占 64B&#xff0c;找出 a、b 两个文件共同的 URL。内存限制是 4G。 操作逻辑&#xff1a; 使用哈希函数 hash(URL) % 1000​ 将每个URL映射到0-999的编号 文件A切割为a0, a1…...

Spring AI Alibaba 工具(Function Calling)使用

一、工具(Function Calling)简介 Spring AI Alibaba工具(Function Calling)&#xff1a;https://java2ai.com/docs/1.0.0-M6.1/tutorials/function-calling/ 1、工具(Function Calling) “工具&#xff08;Tool&#xff09;”或“功能调用&#xff08;Function Calling&#xf…...

汽车方向盘开关功能测试的技术解析

随着汽车智能化与电动化的发展&#xff0c;方向盘开关的功能日益复杂化&#xff0c;从传统的灯光、雨刷控制到智能语音、自动驾驶辅助等功能的集成&#xff0c;对开关的可靠性、耐久性及安全性提出了更高要求。本文结合北京沃华慧通测控技术有限公司&#xff08;以下简称“慧通…...

9-100V输入替代CYT5030/LM5030高压双路电流模式PWM控制器

产品描述: PC3530高压 PWM 控制器包含实现推挽和桥式拓扑所需的所有功能&#xff0c;采用电流模式控制&#xff0c;提供两个交替栅极驱动器输出。PC3530内置高压启动稳压器&#xff0c;可在 9V~100V 的宽输入电压范围内工作。芯片内部还集成有误差放大器、精密基准、两级过流保…...

详细讲解c++中线程类thread的实现,stl源码讲解之thread

Thread 本节我们来详细介绍一下c中的线程类thread&#xff0c;在讲解的过程中会用到大量模板的知识&#xff0c;可以去看c详解模板泛型编程&#xff0c;详解类模板的实现为什么不能放在cpp文件_泛型函数 cpo-CSDN博客 源码: template <class _Fn, class... _Args, enable_…...

PostgreSQL详解

第一章&#xff1a;环境部署与基础操作 1.1 多平台安装详解 Windows环境 图形化安装 下载EnterpriseDB安装包&#xff08;含pgAdmin&#xff09; 关键配置项说明&#xff1a; # postgresql.conf优化项 max_connections 200 shared_buffers 4GB work_mem 32MB 服务管理命…...

系统思考—第五项修炼

感谢【汇丰】邀请&#xff0c;为其高阶管理者交付系统思考系列项目。这不仅是一次知识的传递&#xff0c;更是一次认知的升级。 系统思考&#xff0c;作为《第五项修炼》的核心能力&#xff0c;正在帮助越来越多的管理者突破碎片化决策的困局&#xff0c;建立看见全貌的智慧与…...

如何使用QuickAPI生成带参数的数据API(基于原生SQL)

目录 一、示例表结构 二、准备工作 三、创建带参数的数据API 步骤 1&#xff1a;登录 QuickAPI 平台 步骤 2&#xff1a;连接数据库 步骤 3&#xff1a;配置基础信息 步骤 4&#xff1a;编写 SQL 并添加参数 步骤 5&#xff1a;测试并发布API 步骤 6&#xff1a;验证A…...

RHINO 转 STL,解锁 3D 打印与工业应用新通道

一、RHINO 格式介绍 RHINO 是一款功能强大的三维建模软件&#xff0c;其对应的文件格式&#xff08;.3dm&#xff09;能够精确地存储复杂的三维模型数据。它支持多种几何类型&#xff0c;包括 NURBS&#xff08;非均匀有理 B 样条曲线&#xff09;、多边形网格等。这种格式的优…...

PySide6属性选择器设置样式避坑

总所周知&#xff0c;Qt中qss语法支持属性选择器&#xff0c;通过setProperty设置key和value&#xff0c;支持在多种样式之前切换。今天使用了一下PySide6的属性选择器&#xff0c;发现了一个问题。完整代码见最后。 首先&#xff0c;先写一段qss样式&#xff0c;用来设置按键样…...

BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测,附模型报告

BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测&#xff0c;附模型报告 目录 BKA-CNN-BiLSTM、CNN-BiLSTM、BiLSTM、CNN四模型多变量时序光伏功率预测&#xff0c;附模型报告预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-BiLSTM、CNN-…...

ADS 学习和培训资源 - Keysight ADS

在 Signal Edge Solutions&#xff0c;我们是 Keysight ADS 的忠实用户&#xff0c;因此我们明白&#xff0c;使用和学习这款强大的仿真工具有时可能非常困难。 因此&#xff0c;我们编制了一份清单&#xff0c;列出了一些我们最喜欢的 ADS 学习和培训资源&#xff0c;以帮助您…...

【leetcode刷题记录】(java)数组 链表 哈希表

文章目录 四、题目之&#xff1a;代码随想录(1) 代码随想录&#xff1a;数组[704. 二分查找](https://leetcode.cn/problems/binary-search/)[27. 移除元素](https://leetcode.cn/problems/remove-element/)暴力解:双指针&#xff1a; [977. 有序数组的平方](https://leetcode.…...

ngx_http_core_root

定义在 src\http\ngx_http_core_module.c static char * ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_core_loc_conf_t *clcf conf;ngx_str_t *value;ngx_int_t alias;ngx_uint_t …...

大模型在支气管肺癌预测及临床决策中的应用研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、大模型预测支气管肺癌的原理与技术基础 2.1 大模型简介 2.2 数据收集与预处理 2.3 模型训练与优化 三、术前预测 3.1 病情评估 3.1.1 肿瘤大小、位置及分期预测 3.1.2 转移风险预测 3.2 手术风险预测 3.2.1 患…...

机器人原点丢失后找回原点的解决方案与步骤

机器人原点丢失后找回原点的解决方案与步骤 在机器人运行过程中&#xff0c;原点丢失可能导致定位错误、运动失控等问题&#xff0c;常见于机械臂、AGV&#xff08;自动导引车&#xff09;、3D打印机等设备。以下是针对原点丢失问题的系统性解决方案及详细步骤&#xff0c;涵盖…...

CSS SEO、网页布局、媒体查询

目录 一、SEO 头部三大标签 1. Title 标签&#xff08;标题&#xff09; 核心作用 优化规范 示例 2. Meta Description&#xff08;描述&#xff09; 核心作用 优化规范 示例 3. Viewport 标签&#xff08;视口&#xff09; 核心作用 优化规范 4. 完整 SEO 头部模…...

SolidJS 深度解析:高性能响应式前端框架

SolidJS 是一个新兴的响应式前端框架&#xff0c;以其极致的性能、简洁的语法和接近原生 JavaScript 的开发体验而闻名。它结合了 React 的声明式 UI 和 Svelte 的编译时优化&#xff0c;同时采用细粒度响应式更新&#xff0c;避免了虚拟 DOM&#xff08;Virtual DOM&#xff0…...

基于Spring Boot + Vue的银行管理系统设计与实现

基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速&#xff0c;传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统&#xff0c;通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…...

解决 Ubuntu/Debian 中 `apt-get` 报错 “无法获得锁 /var/lib/dpkg/lock“

问题描述 在 Ubuntu/Debian 系统中运行 sudo apt-get install 或 sudo apt update 时&#xff0c;遇到以下错误&#xff1a; E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/)&#xff0c;是否有其他进程正占用它&#…...

OpenGL 着色器

一、‌着色器基础结构‌ ‌版本声明与入口函数‌ ‌首行版本声明‌&#xff1a;必须指定 GLSL 版本和模式&#xff08;如 #version 450 core&#xff09;‌。 #version 450 core // 声明使用 OpenGL 4.5 Core Profile ‌入口函数‌&#xff1a;所有着色器的入口均为 main() 函…...

代码随想录刷题day53|(二叉树篇)105.从前序与中序遍历序列构造二叉树(▲

目录 一、二叉树基础知识 二、构造二叉树思路 2.1 构造二叉树流程&#xff08;先序中序 2.2 递归思路 三、相关算法题目 四、易错点 一、二叉树基础知识 详见&#xff1a;代码随想录刷题day34|&#xff08;二叉树篇&#xff09;二叉树的递归遍历-CSDN博客 二、构造二叉…...

【leetcode刷题日记】lc.560-和为 K 的子数组

目录 1.题目 2.代码 1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入…...

计算机期刊推荐 | 计算机-人工智能、信息系统、理论和算法、软件工程、网络系统、图形学和多媒体, 工程技术-制造, 数学-数学跨学科应用

Computers, Materials & Continua 学科领域&#xff1a; 计算机-人工智能、信息系统、理论和算法、软件工程、网络系统、图形学和多媒体, 工程技术-制造, 数学-数学跨学科应用 期刊类型&#xff1a; SCI/SSCI/AHCI 收录数据库&#xff1a; SCI(SCIE),EI,Scopus,知网(CNK…...

K8S安装及部署calico(亲测有用[特殊字符])

一、 基础部署&#xff08;三台均部署&#xff09; 1. 关闭防火墙并修改网络为aliyun 要保证网络可以使用&#xff0c;可以将DNS的指向修改为114.114.114.114和8.8.8.8这两个。 systemctl stop firewalld && systemctl disable firewalld sed -i s/enforcing/disabl…...

etcd性能测试

etcd性能测试 本文参考官方文档完成etcd性能测试&#xff0c;提供etcd官方推荐的性能测试方案。 1. 理解性能&#xff1a;延迟与吞吐量 etcd 提供稳定、持续的高性能。有两个因素决定性能&#xff1a;延迟和吞吐量。延迟是完成一项操作所花费的时间。吞吐量是在某个时间段内…...

在shell脚本内部获取该脚本所在目录的绝对路径

目录 需求描述 方法一&#xff1a;使用 dirname 和 readlink 命令 方法二&#xff1a;使用 BASH_SOURCE 变量 方法三&#xff1a;仅使用纯 Bash 实现 需求描述 工作中经常有这样情况&#xff0c;需要在脚本内部获取该脚本自己所在目录的绝对路径。 假如有一个脚本/a/b/c/…...

JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例

提醒 要求了解或者熟练掌握以下知识点 spring 事务mysql 脏读如何保证缓存和数据库数据一致性延迟双删分布式锁并发编程 原子操作类 前言 在起草这篇博客之前 我做了点功课 这边我写的是一个示例代码 数据层都写成了 mock 的形式(来源于 JUnit5) // Dduo import java.u…...

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测

SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测 目录 SCI一区 | Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【SCI一区级】Matlab实现DBO-TCN-LSTM-Attention多变量时间序列预测&#xff08;程…...

【Python】天气数据可视化

1. Python进行数据可视化 在数据分析和科学计算领域&#xff0c;Python凭借其强大的库和简洁的语法&#xff0c;成为了众多开发者和科研人员的首选工具。数据可视化作为数据分析的重要环节&#xff0c;能够帮助我们更直观地理解数据背后的规律和趋势。本文将详细介绍如何使用P…...

c#的.Net Framework 的console 项目找不到System.Window.Forms 引用

首先确保是建立的.Net Framework 的console 项目,然后天健reference 应用找不到System.Windows.Forms 引用 打开对应的csproj 文件 在第一个PropertyGroup下添加 <UseWindowsForms>true</UseWindowsForms> 然后在第一个ItemGroup 下添加 <Reference Incl…...

Ubuntu 重置密码方法

目录 修改过 root 密码&#xff0c;重置密码的方法没改过 root 密码‌&#xff0c;重置密码的方法 修改过 root 密码&#xff0c;重置密码的方法 Ubuntu 默认禁用root用户&#xff0c;意思就是安装好Ubuntu系统后&#xff0c;root用户默认是没有密码的&#xff0c;普通用户通过…...

电机控制常见面试问题(二十)

文章目录 一.整流电路绕组接法二.电机为什么需要转速器三.电机转矩产生原理四.电机控制中载波频率大小的确定五.开关周期 Tpwm 一.整流电路绕组接法 为了引出直流的输出&#xff0c;一定要在整流变压器的二次侧引出零线&#xff0c;所以二次侧绕组必须接成星形 一次绕组必须要…...

Linux系统之yum本地仓库创建

目录 一.Linux软件安装 1.Rpm包安装 2.yum本地仓库安装 二.yum本地仓库建立 三.编译 一.Linux软件安装 软件安装共2种安装方式&#xff0c;通过rpm包安装或通过yum仓库库安装。 先下载安装包命令的方式去安装软件包安装结束 得到一个可以执行程序 绝对路径下的程序 1.…...

未来技术的发展趋势与影响分析

区块链技术在版权中的应用越来越受到关注。它的基本原理是通过分布式账本将每一份作品的版权信息储存起来&#xff0c;确保这些信息不可篡改、不可删除。这就意味着&#xff0c;当创作者发布作品时&#xff0c;可以在区块链上登记相关信息。这样&#xff0c;任何人都能验证版权…...

ROS2 架构梳理汇总整理

文章目录 前言正文机器人平台整体架构&#xff08;ROS2&#xff09;图一、个人理解整体架构 ROS2架构图一、个人理解ROS2整体架构图二、开发者整理ROS2整体架构图三、Intel整理ROS2整体架构图四、DDS具体架构说明 ROS2 Control架构图一、官方整整理ROS2 Control整体架构 总结 前…...