C++ MySQL存储二进制数据、存储照片

news2024/11/16 9:50:22

版权声明:本文为CSDN博主「intfre」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nibiru_holmes/article/details/51387047

0x01

首先MySQL支持二进制的类型有Blob:

MySQL的四种BLOB类型

类型 大小(单位:字节)

  • TinyBlob 最大 255
  • Blob 最大 65K
  • MediumBlob 最大 16M
  • LongBlob 最大 4G

0x02

插入二进制数据时需要利用mysql_real_escape_string函数对数据进行转换

0x03

读取二进制数据时需要利用mysql_fetch_length函数字段长度, 该函数需要在mysql_fetch_row调用后才可以正常获取结果

0x04

写入例子:


int  CFinger_PrintDlg::Connect_Mysql(byte b_name[], byte* b_data,int len_of_data) {
 
	const char user[] = "root";
	const char pswd[] = "toor";
	const char host[] = "127.0.0.1";
	const char db[] = "Fingerprint";
 
	int res;
	int listrow = 0;
	char sql_buf[100] = {};
	unsigned int port = 3306;
	bool return_result = false;
	MYSQL myCont;
	MYSQL_RES *result;
	MYSQL_ROW sql_row;
	HWND hWnd = GetSafeHwnd();
	TCHAR sql_buf_t[100] = {};
	//CListCtrl* list = (CListCtrl*)GetDlgItem(IDC_LIST3);
	mysql_init(&myCont);
 
	if (mysql_real_connect(&myCont, host, user, pswd, db, port, NULL, 0))
	{
		PostMessage(WM_MyMessage, (WPARAM)&L"连接数据库成功!!", (LPARAM)NULL);
	}
	
	mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式
	char buf[2000] = { NULL };
 
	unsigned int escape_size = 2 * len_of_data + 2;
	char* escape_object = (char *)malloc(escape_size);
	escape_size = mysql_real_escape_string(&myCont, (char*)escape_object, (char *)b_data, len_of_data);
 
	int sql_len = sprintf_s(buf, "insert into finger3(info) values('%s')", escape_object);
	res = mysql_real_query(&myCont,buf, sql_len);
 
	if (!res)
	{
 
		return_result = TRUE;
		if (!res)
		{
 
			PostMessage(WM_MyMessage, (WPARAM)L"写入成功", NULL);
 
			
		}
	}
	else
	{
		PostMessage(WM_MyMessage, (WPARAM)L"写入失败", NULL);
	}
 
	mysql_close(&myCont);
 
	return return_result;
}

0x05

读取操作:

void* CFinger_PrintDlg::Read_Mysql()
{
if (!g_connect){
SendMessage(WM_MyMessage, (WPARAM)L"数据库未连接…", NULL);
return 0;
}

MYSQL_RES *res = NULL;
MYSQL_ROW row;
unsigned long *row_len;
char *object = NULL;
//const char *sql = "select info from final where id=";
char sql[100] = { NULL };
unsigned long objsize;
int ret;
for (int i = 1; i <= 10; i++){

sprintf_s(sql, "select info from final where id='%d'", i);


ret = mysql_real_query(&myCont, sql, strlen(sql));
if (ret){
	PostMessage(WM_MyMessage, (WPARAM)L"读取失败1", NULL);
}

res = mysql_store_result(&myCont);
if (res == NULL){
	PostMessage(WM_MyMessage, (WPARAM)L"读取失败2", NULL);
}

/* important */
row = mysql_fetch_row(res);
row_len = mysql_fetch_lengths(res);  /* get the object's length */
if (row_len == NULL){
	PostMessage(WM_MyMessage, (WPARAM)L"读取失败3", NULL);
}


	objsize = row_len[0];
	object = (char*)malloc(objsize);
	if (object == NULL){
		PostMessage(WM_MyMessage, (WPARAM)L"读取失败4", NULL);
	}

	memcpy(object, row[0], objsize);

	
	if (BIOKEY_DB_ADD(ZKFingerHandle, i, objsize, (byte*)object)){

		PostMessage(WM_MyMessage, (WPARAM)L"读取成功", NULL);
	}

}
g_connect = false;
;
//mysql_close(&myCont);
mysql_free_result(res);
return NULL;

}

0x06

更新操作:

int CFinger_PrintDlg::Updata_Mysql(byte b_name[], byte* b_data, int len_of_data){

if (!g_connect){
	SendMessage(WM_MyMessage, (WPARAM)L"数据库未连接...", NULL);
	return 0;
}
int res;
bool return_result = false;

mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式
char buf[2000] = { NULL };

unsigned int escape_size = 2 * len_of_data + 2;
char* escape_object = (char *)malloc(escape_size);
escape_size = mysql_real_escape_string(&myCont, (char*)escape_object, (char *)b_data, len_of_data);
CString id_cs;
CString name_cs;
int id;
char name[20] = { NULL };
GetDlgItem(IDC_EDIT1)->GetWindowTextW(id_cs);
GetDlgItem(IDC_EDIT2)->GetWindowTextW(name_cs);
id = _wtoi(id_cs);
WideCharToMultiByte(CP_ACP, 0, name_cs, -1, name, name_cs.GetLength(), NULL, NULL);

//int sql_len = sprintf_s(buf, "insert into final(id,name,info) values('%d','%s','%s')", id, name, escape_object);
//UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
int sql_len = sprintf_s(buf, "UPDATE final SET name='%s',info='%s' where id ='%d'", name, escape_object, id);
res = mysql_real_query(&myCont, buf, sql_len);

if (!res)
{

	return_result = TRUE;
	if (!res)
	{

		PostMessage(WM_MyMessage, (WPARAM)L"更新成功", NULL);


	}
}
else
{
	PostMessage(WM_MyMessage, (WPARAM)L"更新失败", NULL);
}

//mysql_close(&myCont);
g_connect = false;
return return_result;

}

C/C++ 开发(学习笔记八):Mysql数据库图片存储

在这里插入图片描述

1.准备好一张图片文件,将图片read,存放到buffer
2.将图片数据(buffer)写入mysql
3.从mysql中读取图片数据(buffer)
4.将图片数据(buffer)写入磁盘

一、读入图片
//读取图片
//filename:path+file name
//buffer:store image data
int read_image(char* filename,char* buffer){
if(filenameNULL||bufferNULL) return -1;
FILE *fp=fopen(filename,“rb”);
if(fp==NULL){
printf(“fopen faild\n”);
return -2;
}
//file size
fseek(fp,0,SEEK_END);//把文件指针置到末尾
int length=ftell(fp);//返回当前文件流的指针位置,也就是偏移量,文件大小file size
fseek(fp,0,SEEK_SET);//把文件指针置到开头
int size=fread(buffer,1,length,fp);//每次读1个字节,读length次。读取的参数放到buffer里
if(size!=length){
printf(“fread faild\n”);
return -3;
}
fclose(fp);
return size;
}

二、图片数据写入磁盘
//图片写入到磁盘(参数1:保存的文件名 参数2:要写的数据 参数3:数据长度)
int write_image(char* filename,char* buffer,int length){
if(filenameNULL||bufferNULL||length<=0) return -1;
FILE *fp=fopen(filename,“wb+”);//w表示写入 b表示二进制 +表示,如果文件不存在则会创建,存在则会直接写入
if(fp==NULL){
printf(“fopen faild\n”);
return -2;
}
int size=fwrite(buffer,1,length,fp);//从buffer写到fp中,每次写1个字节,写length次
if(size!=length){
printf(“fwirte failded:%d\n”,size);
return -3;
}
fclose(fp);
return size;
}

三、表中增加图片数据一列
在表中加一列U_IMG,存放图片数据

ALTER TABLE TBL_USER ADD U_IMG BLOB;
1
变成下面这样

四、将图片数据存入Mysql服务器
MySQL C语言接口-预处理语句
mysql stmt语法_mysql中SQL执行过程详解与用于预处理语句的SQL语法

//插入图片的SQL语句,由于不知道传入的图片是什么,用?作为占位符
#define SQL_INSERT_IMG_USER “insert TBL_USER(U_NAME,U_GENDER,U_IMG) value(‘Dog’,‘man’,?);”

int mysql_write(MYSQL* handle,char* buffer,int length){
if(handleNULL||bufferNULL||length<=0) return -1;

MYSQL_STMT *stmt=mysql_stmt_init(handle);//在mysql中创建一个存储空间
int ret=mysql_stmt_prepare(stmt,SQL_INSERT_IMG_USER,strlen(SQL_INSERT_IMG_USER));
if(ret){
    printf("mysql_stmt_prepare:%s\n",mysql_error(handle));
    return -2;
}
MYSQL_BIND param={0};
param.buffer_type=MYSQL_TYPE_LONG_BLOB;
param.buffer=NULL;
param.is_null=0;
param.length=NULL;
ret=mysql_stmt_bind_param(stmt,&param);
if(ret){
    printf("mysql_stmt_bind_param:%s\n",mysql_error(handle));
    return -3;
}
ret=mysql_stmt_send_long_data(stmt,0,buffer,length);//允许应用程序分块地将参数数据发送到服务器
if(ret){
    printf("mysql_stmt_send_long_data:%s\n",mysql_error(handle));
    return -4;
}
ret=mysql_stmt_execute(stmt);//将当前绑定的参数标记符的值发送到服务器,服务器用新提供的数据替换标记符
if(ret){
    printf("mysql_stmt_execute:%s\n",mysql_error(handle));
    return -5;
}
ret=mysql_stmt_close(stmt);
if(ret){
    printf("mysql_stmt_close:%s\n",mysql_error(handle));
    return -6;
}
return ret;

}

五、将图像数据从Mysql服务器中取出
#define SQL_SELECT_IMG_USER “SELECT U_IMG FROM TBL_USER WHERE U_NAME=‘Dog’;”

int mysql_read(MYSQL* handle,char* buffer,int length){
if(handleNULL||bufferNULL||length<=0) return -1;

MYSQL_STMT *stmt=mysql_stmt_init(handle);//在mysql中创建一个存储空间
int ret=mysql_stmt_prepare(stmt,SQL_SELECT_IMG_USER,strlen(SQL_SELECT_IMG_USER));
if(ret){
    printf("mysql_stmt_prepare:%s\n",mysql_error(handle));
    return -2;
}

MYSQL_BIND result={0};

result.buffer_type=MYSQL_TYPE_LONG_BLOB;
unsigned long total_length=0;
result.length=&total_length;

ret=mysql_stmt_bind_result(stmt,&result);
if(ret){
    printf("mysql_stmt_bind_result:%s\n",mysql_error(handle));
    return -3;
}
ret=mysql_stmt_execute(stmt);//执行后,长度数据会存储到total_length中
if(ret){
    printf("mysql_stmt_execute:%s\n",mysql_error(handle));
    return -4;
}

//数据从管道里拿出来
ret=mysql_stmt_store_result(stmt);
if(ret){
    printf("mysql_stmt_store_result:%s\n",mysql_error(handle));
    return -5;
}

while(1){
    ret=mysql_stmt_fetch(stmt);
    if(ret!=0&&ret!=MYSQL_DATA_TRUNCATED) break;
    int start=0;
    while(start<(int)total_length){
        result.buffer=buffer+start;
        result.buffer_length=1;//每次读取得长度为1
        mysql_stmt_fetch_column(stmt,&result,0,start);
        start+=result.buffer_length;
    }
}
mysql_stmt_close(stmt);
return total_length;

}

六、完整代码
#include<mysql.h>
#include<stdio.h>
#include<string.h>

#define KING_DB_SERVER_IP “192.168.192.128” //ip
#define KING_DB_SERVER_PORT 3306 //端口号
#define KING_DB_USERNAME “admin” //用户名
#define KING_DB_PASSWORD “123456” //密码
#define KING_DB_DEFAULTDB “KING_DB” //数据库名

//插入图片的SQL语句,由于不知道传入的图片是什么,用?作为占位符
#define SQL_INSERT_IMG_USER “insert TBL_USER(U_NAME,U_GENDER,U_IMG) value(‘Dog’,‘man’,?);”

#define SQL_SELECT_IMG_USER “SELECT U_IMG FROM TBL_USER WHERE U_NAME=‘Dog’;”
#define FILE_IMAGE_LENGTH (64*1024)

//读取图片
//filename:path+file name
//buffer:store image data
int read_image(char* filename,char* buffer){
if(filenameNULL||bufferNULL) return -1;
FILE *fp=fopen(filename,“rb”);
if(fp==NULL){
printf(“fopen faild\n”);
return -2;
}
//file size
fseek(fp,0,SEEK_END);//把文件指针置到末尾
int length=ftell(fp);//返回当前文件流的指针位置,也就是偏移量,文件大小file size
fseek(fp,0,SEEK_SET);//把文件指针置到开头
int size=fread(buffer,1,length,fp);//每次读1个字节,读length次。读取的参数放到buffer里
if(size!=length){
printf(“fread faild\n”);
return -3;
}
fclose(fp);
return size;
}

//图片写入到磁盘(参数1:保存的文件名 参数2:要写的数据 参数3:数据长度)
int write_image(char* filename,char* buffer,int length){
if(filenameNULL||bufferNULL||length<=0) return -1;
FILE *fp=fopen(filename,“wb+”);//w表示写入 b表示二进制 +表示,如果文件不存在则会创建,存在则会直接写入
if(fp==NULL){
printf(“fopen faild\n”);
return -2;
}
int size=fwrite(buffer,1,length,fp);//从buffer写到fp中,每次写1个字节,写length次
if(size!=length){
printf(“fwirte failded:%d\n”,size);
return -3;
}
fclose(fp);
return size;
}

int mysql_write(MYSQL* handle,char* buffer,int length){
if(handleNULL||bufferNULL||length<=0) return -1;

MYSQL_STMT *stmt=mysql_stmt_init(handle);//在mysql中创建一个存储空间
int ret=mysql_stmt_prepare(stmt,SQL_INSERT_IMG_USER,strlen(SQL_INSERT_IMG_USER));
if(ret){
    printf("mysql_stmt_prepare:%s\n",mysql_error(handle));
    return -2;
}
MYSQL_BIND param={0};
param.buffer_type=MYSQL_TYPE_LONG_BLOB;
param.buffer=NULL;
param.is_null=0;
param.length=NULL;
ret=mysql_stmt_bind_param(stmt,&param);
if(ret){
    printf("mysql_stmt_bind_param:%s\n",mysql_error(handle));
    return -3;
}
ret=mysql_stmt_send_long_data(stmt,0,buffer,length);//允许应用程序分块地将参数数据发送到服务器
if(ret){
    printf("mysql_stmt_send_long_data:%s\n",mysql_error(handle));
    return -4;
}
ret=mysql_stmt_execute(stmt);//将当前绑定的参数标记符的值发送到服务器,服务器用新提供的数据替换标记符
if(ret){
    printf("mysql_stmt_execute:%s\n",mysql_error(handle));
    return -5;
}
ret=mysql_stmt_close(stmt);
if(ret){
    printf("mysql_stmt_close:%s\n",mysql_error(handle));
    return -6;
}
return ret;

}

int mysql_read(MYSQL* handle,char* buffer,int length){
if(handleNULL||bufferNULL||length<=0) return -1;

MYSQL_STMT *stmt=mysql_stmt_init(handle);//在mysql中创建一个存储空间
int ret=mysql_stmt_prepare(stmt,SQL_SELECT_IMG_USER,strlen(SQL_SELECT_IMG_USER));
if(ret){
    printf("mysql_stmt_prepare:%s\n",mysql_error(handle));
    return -2;
}

MYSQL_BIND result={0};

result.buffer_type=MYSQL_TYPE_LONG_BLOB;
unsigned long total_length=0;
result.length=&total_length;

ret=mysql_stmt_bind_result(stmt,&result);
if(ret){
    printf("mysql_stmt_bind_result:%s\n",mysql_error(handle));
    return -3;
}
ret=mysql_stmt_execute(stmt);//执行后,长度数据会存储到total_length中
if(ret){
    printf("mysql_stmt_execute:%s\n",mysql_error(handle));
    return -4;
}

//数据从管道里拿出来
ret=mysql_stmt_store_result(stmt);
if(ret){
    printf("mysql_stmt_store_result:%s\n",mysql_error(handle));
    return -5;
}

while(1){
    ret=mysql_stmt_fetch(stmt);
    if(ret!=0&&ret!=MYSQL_DATA_TRUNCATED) break;
    int start=0;
    while(start<(int)total_length){
        result.buffer=buffer+start;
        result.buffer_length=1;//每次读取得长度为1
        mysql_stmt_fetch_column(stmt,&result,0,start);
        start+=result.buffer_length;
    }
}
mysql_stmt_close(stmt);
return total_length;

}

int main(){
MYSQL mysql;
if(!mysql_init(&mysql)){//mysql初始化并判断是否出错(返回0为失败)
printf(“mysql_init:%s\n”,mysql_error(&mysql));//mysql_error() 函数返回上一个 MySQL 操作产生的文本错误信息
return -1;
}
if(!mysql_real_connect(&mysql,KING_DB_SERVER_IP,KING_DB_USERNAME,KING_DB_PASSWORD,
KING_DB_DEFAULTDB,KING_DB_SERVER_PORT,NULL,0)){ //连接mysql数据库,并判断是否出错(返回0为失败)
printf(“mysql_real_connect:%s\n”,mysql_error(&mysql));
return -2;
}

printf("case:mysql --> read image and write mysql\n");
char buffer[FILE_IMAGE_LENGTH]={0};
int length = read_image("0voice.jpg",buffer);
if(length<0) goto Exit;
mysql_write(&mysql,buffer,length);
printf("case:mysql-->read mysql and write image\n");
memset(buffer,0,FILE_IMAGE_LENGTH);
length=mysql_read(&mysql,buffer,FILE_IMAGE_LENGTH);

write_image("a.jpg",buffer,length);

Exit:
mysql_close(&mysql);
return 0;
}

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

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

相关文章

Doris-1.2.0升级到Doris-1.2.4

0 背景 在使用doris-1.2.0版本时发现BE节点无故宕机&#xff0c;自己尝试解决无果后再官网寻找解决方案&#xff0c;发现在doris-1.2.0版本中存在这样的隐患bug导致BE节点宕机。 而在咨询社区之后建议对doris进行升级&#xff0c;升级版本doris-1.2.4。该版本是解决1.2.x问题…

Springboot集成neo4j实现知识图谱关系图

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、neo4j是什么&#xff1f;二、安装步骤1.启动2.使用2.简单命令 二、使用springboot集成neo4j1.引入依赖2.功能实现3.查询关系节点4. 查询指定评委和指定选手…

基于matlab使用光线追踪自定义 CDL 通道模型

一、前言 此示例演示如何使用光线追踪分析的输出自定义 CDL 通道模型参数。该示例演示如何&#xff1a; 指定发射器和接收器在 3D 环境中的位置。 使用光线追踪来计算通道的几何方面&#xff1a;光线数量、角度、延迟和衰减。 使用光线追踪分析的结果配置 CDL 通道模型。 使用相…

KDYZ-YM晶闸管伏安特性测试仪

一、概述 晶闸管的伏安特性是晶闸管的基本特性&#xff0c;这项特性的好坏&#xff0c;直接影响到器件在整机上的正常使用。因此&#xff0c;检测晶闸管的伏安特性在晶闸管器件的生产、经销及使用过程中都是十分重要的。 测试方法符合国标JB/T7624-94《整流二极管测试方法》和J…

深入理解Go语言中的函数【单元测试】14

文章目录 go test工具测试函数测试函数的格式测试函数示例 测试组子测试测试覆盖率基准测试基准测试函数格式基准测试示例性能比较函数重置时间并行测试 Setup与TearDownTestMain子测试的Setup与Teardown 示例函数示例函数示例 go test工具 Go语言中的测试依赖go test命令。编…

Three.js+TypeScript+Webpack学习记录(一)

使用环境参考 Node.js v16.19.1 VSCode 插件&#xff1a;Live Server 正文 初始化新工程 安装好 node 环境后&#xff0c;新建一个空项目文件夹&#xff0c;执行 npm init 一路回车即可。 然后配置 npm 所需要的包&#xff0c;直接列一下 package.json {"name":…

SpringBoot集成模板引擎Thymeleaf

本博文重点内容共3个方面&#xff0c;分别是&#xff1a; 在SpringBoot中使用thymeleaf自定义thymeleaf工具类导出静态网页thymeleaf常用的标签 一、在SpringBoot中使用thymeleaf pom.xml <!--Thymeleaf 启动器--><dependency><groupId>org.springframewo…

java基础总结-java技术栈快速复习

java基础 java基础概念 java概述和语言背景 java语言是没有sun公司&#xff08;Stanford University Network&#xff1a;斯坦福大学网络&#xff09;在1995年推出的计算机语言java之父&#xff1a;詹姆斯高斯林&#xff08;James Gosling&#xff09;2009年&#xff0c;sun公…

2021地理设计组二等奖:基于多源数据的黑龙江省森林康养适宜性评价及康养产品设计

一、作品背景 1.森林康养产业蓬勃发展 为适应逐渐增加的康养需求&#xff1b;国家草原局印发《关于促进森林康养产业发展的意见》&#xff0c;在《意见》中指出到2022年&#xff0c;建成基础设施基本完善、产业布局较为合理的区域性森林康养服务体系&#xff1b;到2035年&…

网络工程师的水平检测1

水平测试 文章目录 水平测试填空题&#xff08;11分&#xff09;判断题&#xff08;9分&#xff09;选择题&#xff08;8分&#xff09;简答题&#xff08;26分&#xff09;子网划分&#xff08;24分&#xff09;实验拓扑&#xff08;19分&#xff09;填空题&#xff08;5分&am…

变压器绕制

变压器同名端 1、变压器同名端&#xff0c;是指在变压器绕制的时候&#xff0c;各绕组方向统一&#xff0c;同名端同时都为进线&#xff08;起始端&#xff09; 或出线&#xff08;结束端)。若某一个绕组骨架插入夹头方向反向&#xff0c;则相应该绕组进出线同时反向。同名端&a…

CCTV-TIME特别关注:首届医药港国际健康美食文化嘉年华

“食在广州 味在方舟”首届医药港国际健康美食文化嘉年华4月28日在健康方舟盛大开幕! 【央媒时代TOP中国时代周刊中国品牌万里行CCTV-TIME特别关注】健康美食、滋补靓汤、异国风情、非遗文化、治愈萌宠、灯光夜市、亲子玩乐、浪漫许愿树……五一长假,广州的这场精彩嘉年华活动…

vue3+ts+pinia+vite一次性全搞懂

vue3tspiniavite项目 一&#xff1a;新建一个vue3ts的项目二&#xff1a;安装一些依赖三&#xff1a;pinia介绍、安装、使用介绍pinia页面使用pinia修改pinia中的值 四&#xff1a;typescript的使用类型初识枚举 一&#xff1a;新建一个vue3ts的项目 前提是所处vue环境为vue3&…

springboot文件上传

1.新建文件上传页面 在static目录中新建upload-test.html&#xff0c;上传页面代码如下所示&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>springboot文件上传测试</title> <…

编译时报Clang SA is not enabled问题解决

报此问题应该是swap不足导致的&#xff0c;原因是用的虚拟机&#xff0c;改为16G内存问题排除 具体解决如下&#xff1a; 1.free -h 查看当前分区大小和使用情况 2.扩展分区大小 2.1首先删除系统默认分区 sudo swapoff /swapfile sudo rm /swapfile 2.2新建swap分区&#xf…

ROS学习第十六节—— 头文件与源文件

https://download.csdn.net/download/qq_45685327/87708569 1.自定义头文件调用 新建功能包 在该路径下创建头文件 /home/xiaoming/demo0/src/hello_head/include/hello_head 编写以下代码 #ifndef _HELLO_H #define _HELLO_Hnamespace hello_ns{class HelloPub {public:vo…

分享10个值得推荐的技巧,提升JavaScript 的性能

JavaScript 在网页开发中非常重要&#xff0c;它控制了大部分网页上的活动和动画效果。但是&#xff0c;如果代码编写不当&#xff0c;JavaScript 可能会导致网站速度变慢。代码的不足可能导致网页加载缓慢&#xff0c;渲染速度也会变慢。 按照以下策略来提高您网站的速度和性能…

基于web的病号康复训练系统asp.net+sqlserver+C#

本系统主要内容分为病号管理模块,康复师管理模块,管理员管理模块等三大模块 1,病号管理模块主要分为:用户管理,在线问答,在线预约,用户中心,信息查询. 2. 康复师管理模块主要有:康复师信息管理,病人信息管理&#xff0c;预约信息管理&#xff0c;留言信息管理&#xff0c;训练计…

自然语言处理实战项目3-利用CNN做语义分析任务

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来自然语言处理实战项目3-利用CNN做语义分析任务&#xff0c;深度学习在自然语言处理领域中的应用越来越广泛&#xff0c;其中语义分析是其中一个重要的应用。本文将为读者介绍语义分析的任务以及如何用深度学习方法实现该…

​​2021遥感应用组二等奖:基于机器学习回归算法的鄱阳湖水质遥感定量反演及时序变化监测研究

作品介绍 一、作品背景 鄱阳湖是中国第一大淡水湖&#xff0c;也是中国第二大湖&#xff0c;它在调节长江水位、涵养水源、改善当地气候等方面起着重大的作用。但近年来受围垦、环境污染等人类活动影响&#xff0c;鄱阳湖湿地退化严重&#xff0c;同时使鄱阳湖的容量减少&…