C++中使用CopyFromRecordset将记录集拷贝到excel中时,如果记录集为0个,函数崩溃,是什么原因
文章目录
- 原因分析
- 解决方案
- 1. 检查记录集是否为空
- 2. 安全调用COM方法
- 3.进行异常捕获
- 4. 替代方案:手动处理空数据
- 总结
在C++中使用CopyFromRecordset
将空记录集(0条记录)复制到Excel时崩溃的原因及解决方法如下:
原因分析
- 空记录集未处理:
CopyFromRecordset
方法未正确处理空的_Recordset
对象,导致访问无效数据或内部状态错误。 - COM接口限制:某些Excel版本或COM接口实现可能在接收空数据时引发异常,而非优雅地返回错误码。
- 参数或状态校验缺失:未在调用前检查记录集的
EOF
和BOF
属性,直接调用高风险方法。
解决方案
1. 检查记录集是否为空
在调用CopyFromRecordset
前,通过检查EOF
和BOF
确认是否有数据:
VARIANT_BOOL eof, bof;
_RecordsetPtr rs = ...; // 获取记录集指针// 检查记录集状态
rs->get_EOF(&eof);
rs->get_BOF(&bof);if (eof == VARIANT_TRUE && bof == VARIANT_TRUE) {// 记录集为空,跳过复制std::cout << "记录集为空,未执行复制操作。" << std::endl;
} else {// 执行复制RangePtr range = ...; // 获取目标Range对象range->CopyFromRecordset(rs);
}
2. 安全调用COM方法
确保正确处理COM方法的返回值和参数:
HRESULT hr = range->CopyFromRecordset(rs);
if (FAILED(hr)) {// 处理错误,例如抛出异常或记录日志_com_error err(hr);std::cerr << "CopyFromRecordset失败: " << err.ErrorMessage() << std::endl;
}
3.进行异常捕获
通过异常捕获方式来避免程序直接闪退:
#include <afx.h>
#include <comdef.h> // 用于_com_error
#include <atlbase.h> // 用于CComVariant
#include <adoint.h> // ADO记录集支持void ExportToExcel(_RecordsetPtr pRecordset) {// 1. 初始化COM库(MFC项目可用AfxOleInit()替代)CoInitialize(NULL);CApplication excelApp;CWorkbook workbook;CWorksheet sheet;CRange range;try {// 2. 创建Excel对象if (!excelApp.CreateDispatch("Excel.Application")) {throw std::runtime_error("无法启动Excel");}excelApp.SetVisible(TRUE);// 3. 创建工作簿和工作表workbook = excelApp.GetWorkbooks().Add();sheet = workbook.GetActiveSheet();range = sheet.GetRange(CComVariant("A1"));// 4. 将记录集数据复制到Excel// --- 可能抛出异常的调用 ---range.CopyFromRecordset(pRecordset);// 5. 保存并退出Excelworkbook.SaveAs(CComVariant("C:\\Output.xlsx"));excelApp.Quit();}// 捕获MFC的OLE自动化异常(需手动释放)catch (COleDispatchException* e) {CString errorMsg;e->GetErrorMessage(errorMsg.GetBuffer(256), 256);errorMsg.ReleaseBuffer();TRACE("OLE异常: %s\n", errorMsg);e->Delete(); // 必须手动释放内存// 强制关闭Excel进程(避免残留)system("taskkill /IM EXCEL.EXE /F");}// 捕获COM错误catch (const _com_error& e) {_bstr_t desc = e.Description(); // 获取详细错误描述TRACE("COM错误: %s (HRESULT=0x%08X)\n", (LPCTSTR)desc, e.Error());// 处理特定错误码if (e.Error() == 0x800A03EC) { // Excel范围无效MessageBox(NULL, L"目标单元格范围无效!", L"错误", MB_ICONERROR);}}// 捕获内存不足异常catch (CMemoryException* e) {e->ReportError();e->Delete();}// 捕获标准异常catch (const std::exception& e) {MessageBoxA(NULL, e.what(), "标准异常", MB_ICONERROR);}// 捕获其他未知异常catch (...) {MessageBox(NULL, L"未知异常!", L"错误", MB_ICONERROR);}// 6. 释放COM对象(确保即使异常也执行)range.ReleaseDispatch();sheet.ReleaseDispatch();workbook.ReleaseDispatch();excelApp.ReleaseDispatch();// 7. 清理COM库CoUninitialize();
}
4. 替代方案:手动处理空数据
若仍需在Excel中保留表头或其他占位信息:
if (eof && bof) {// 写入提示信息RangePtr headerRange = sheet->Range["A1"];headerRange->Value2 = "无数据";
} else {range->CopyFromRecordset(rs);
}
总结
崩溃的根本原因是未对空记录集进行校验。通过预先检查EOF
和BOF
属性,避免在无数据时调用CopyFromRecordset
,并妥善处理COM错误,即可解决问题。务必在所有COM操作后检查HRESULT
以确保稳定性。
前路或许漫长,但每一步都算数;黑夜或许难熬,但星光永远在暗处为你铺路。愿你带着热爱奔赴山海,在尘埃中仰望星辰,在风暴里紧握希望——人生没有白走的路,所有蛰伏的沉淀终会化作破晓的晨光,照亮你跋涉过的长夜,见证你亲手写就的远方。
上一篇:C++中将记录集的数据复制到Excel工作表中的CRange类CopyFromRecordset函数异常怎么捕获
下一篇:C++中ShellExecute函数使用方法说明,如果一开始参数为隐藏,后面还能再显示出来吗
思路来源:
在C++中使用CopyFromRecordset函数将记录集复制到Excel时,如果记录集为空(0个记录),程序会崩溃。我需要分析可能的原因,并提供解决方案。首先,我需要回忆一下CopyFromRecordset的使用场景和相关注意事项。
首先,CopyFromRecordset是Excel的COM接口中的一个方法,用于将ADO记录集(_Recordset)的数据复制到Excel的工作表中。这个方法通常在VBA中使用较多,但用户是在C++中使用,所以可能涉及到通过COM接口调用的问题。
当记录集为空时,即记录数为0,调用CopyFromRecordset可能会导致崩溃。可能的原因有几个:
1、空记录集的处理问题:CopyFromRecordset可能没有正确处理空记录集的情况。当记录集为空时,可能没有正确初始化某些内部结构,导致访问无效内存或其他错误。
2、COM对象状态问题:在调用CopyFromRecordset之前,可能没有正确检查记录集的EOF(End Of File)和BOF(Begin Of File)属性。如果记录集为空,EOF和BOF都为True,这时候直接调用CopyFromRecordset可能会出错。
3、参数传递问题:可能在调用方法时参数传递有误,例如参数数量或类型不正确,尤其是在C++中处理COM对象时,参数传递需要严格按照接口定义进行。
4、 未捕获的异常:在C++中,如果COM方法返回错误而没有进行异常处理,可能导致程序崩溃。例如,HRESULT返回值未被检查,导致后续代码执行出现问题。
接下来,我需要验证这些可能性,并思考如何解决。
首先,用户应该在调用CopyFromRecordset之前检查记录集是否为空。可以通过检查记录集的EOF和BOF属性来判断是否有数据。如果两者都为True,说明记录集为空,此时应该跳过复制操作,而不是调用CopyFromRecordset。
例如,在VBA中,可能会这样做:
If Not (rs.EOF And rs.BOF) Then
Range(“A2”).CopyFromRecordset rs
End If
在C++中,需要通过COM接口来获取这些属性。用户需要调用get_EOF和get_BOF方法,检查返回值是否为VARIANT_TRUE。如果两者都为真,说明记录集为空。
另外,在C++中使用COM对象时,必须确保所有参数正确传递,并且正确处理返回的HRESULT值。例如,CopyFromRecordset可能有可选参数,如MaxRows和MaxColumns,如果未正确传递这些参数,可能会导致问题。在C++中调用该方法时,可能需要明确传递这些参数,即使使用默认值。
此外,还需要考虑异常处理。在C++中,COM方法通常返回HRESULT,用户应该检查每个调用的返回值,确保成功后再继续执行。例如,调用CopyFromRecordset后,检查返回的HRESULT是否为S_OK,如果不是,需要处理错误,而不是继续执行导致崩溃。
可能的解决方案步骤包括:
1、在调用CopyFromRecordset之前,检查记录集的EOF和BOF属性,确认是否有数据。
2、 如果没有数据,跳过复制操作,避免调用该方法。
3、 确保在调用COM方法时正确传递所有必需的参数,处理可能的默认参数。
4、检查所有COM调用的HRESULT返回值,正确处理错误。
另外,可能需要注意,某些版本的Excel或ADO可能对空记录集的处理不一致,导致崩溃。因此,提前检查并避免在空记录集上调用该方法是最稳妥的做法。
总结来说,崩溃的原因是没有处理空记录集的情况,导致调用了不支持空输入的CopyFromRecordset方法。解决方法是在调用前检查记录集是否有数据,如果没有,则不调用该方法,并可能进行其他处理,如显示提示信息。
相关文章:
C++中使用CopyFromRecordset将记录集拷贝到excel中时,如果记录集为0个,函数崩溃,是什么原因
文章目录 原因分析解决方案1. 检查记录集是否为空2. 安全调用COM方法3.进行异常捕获4. 替代方案:手动处理空数据 总结 在C中使用CopyFromRecordset将空记录集(0条记录)复制到Excel时崩溃的原因及解决方法如下: 原因分析 空记录集…...
第四届能源、电力与电气国际学术会议(ICEPET 2025)
重要信息 地点:中国-成都 官网:www.icepet.net(了解参会投稿等信息) 时间:2025年4月25-27日 简介 第四届能源、电力与电气会(ICEPET 2025定于2025年4月25-27日在中国成都举办。 本次将围绕能源、电力及…...
【IDEA的个性化配置】
目录: 一:隐藏项目路径二:禁用斜体注释三:重新Maven构建未完待续... 一:隐藏项目路径 😊在IDEA左侧的Project目录中,项目名称后面显示了项目的文件路径地址,如果不喜欢可以隐藏&…...
分享最近前端面试遇到的一些问题
前情提要(分享个人情况,可以直接跳过) 先说一下我的个人情况,我是2026届的,目前是在找前端实习。 3月初,从3月3日开始在Boss上投简历。 分享我的个人故事,不想看可以直接滑到下面,…...
SSH免密登录服务器方法
Window免密连接Linux系统 生成公匙 ssh-keygen -t rsa一路回车生成公钥 复制公匙,使用记事本打开复制全部内容 notepad C:\Users\DELL\.ssh\id_rsa.pub内容如"ssh-rsa AAAAB3NzaC1yc2EAAAA…" 远程登录服务器将内容写入~/.ssh/authorized_keys echo …...
3.26前端模拟面试
包含 Vue 3、TypeScript、性能优化、工程化等方面,偏八股文。 基础知识 Vue 3 响应式原理:Vue 3 如何实现响应式系统?Proxy 和 Reflect 的作用是什么? TypeScript 类型体操:实现一个 TypeScript 类型 DeepPartial&am…...
23种设计模式-备忘录(Memento)设计模式
备忘录设计模式 🚩什么是备忘录设计模式?🚩备忘录设计模式的特点🚩备忘录设计模式的结构🚩备忘录设计模式的优缺点🚩备忘录设计模式的Java实现🚩代码总结🚩总结 🚩什么是…...
六十天Linux从0到项目搭建(第八天)(缓冲区、gitee提交)
一 缓冲区,C中有很多字符a. 可显字符 b.控制字符 在 C 语言 中,字符可以分为 可显字符(Printable Characters) 和 控制字符(Control Characters),它们通常存储在 缓冲区(Buffer&…...
QOpenGLWidget视频画面上绘制矩形框
一、QPainter绘制 在QOpenGLWidget中可以绘制,并且和OpenGL的内容叠在一起。paintGL里面绘制完视频后,解锁资源,再用QPainter绘制矩形框。这种方式灵活性最好。 void VideoGLWidget::paintGL() {glClear(GL_COLOR_BUFFER_BIT);m_program.bind();//绘制视频数据// 解绑VAOg…...
vue3 ts 封装axios,配置axios前置拦截器,让所有axios请求携带token
vue3 ts 封装axios,配置axios前置拦截器,让所有axios请求携带token http.tsapp.tsvue文件 http.ts import axios from axios // 引入axios import router from /router import Qs from qs import { ElMessage } from element-plusconst { prefixBasePath } requir…...
前端使用WPS WebOffice 做在线文档预览与编辑
先附上官网 WebOffice SDK 1、在下面这个地方找到jdk,然后下载 按照 2、只需要把jdk下载下来,放到项目中,然后引入到项目中就可以了,在wps 官网创建个应用,然后把appId放到代码中就可以了,等待后端把回调…...
在 CentOS 系统中开机自动执行 Shell 脚本
在 CentOS 系统中,可以通过以下方法设置开机自动执行 Shell 脚本。推荐使用 systemd 服务(现代 Linux 系统的标准方式),也可以使用传统的 /etc/rc.local 方法。 方法 1:使用 Systemd 服务(推荐)…...
kotlin知识体系(四) : inline、noinline、crossinline 关键字对应编译后的代码是怎样的 ?
1. inline、noinline、crossinline 的作用 在 Kotlin 里,inline、noinline 和 crossinline 这几个关键字和高阶函数紧密相关,它们能够对高阶函数的行为进行优化和控制。本文接下来会详细介绍它们的作用和原理。 1.1 inline 关键字 inline 关键字用于修…...
Python电影市场特征:AR模型时间序列趋势预测、热图可视化评分影响分析IMDb数据|附数据代码
原文链接:https://tecdat.cn/?p41214 分析师:Zhiheng Lin 在数字时代,电影产业的数据分析已成为洞察市场趋势与用户偏好的重要工具。本专题合集聚焦印度电影市场,通过IMDb数据集(IMDb Movies Dataset)的深…...
【后端】【Django DRF】从零实现RBAC 权限管理系统
Django DRF 实现 RBAC 权限管理系统 在 Web 应用中,权限管理 是一个核心功能,尤其是在多用户系统中,需要精细化控制不同用户的访问权限。本文介绍如何使用 Django DRF 设计并实现 RBAC(基于角色的访问控制)系统&…...
使用docker部署springboot、Vue分离项目,部署到主路径
这几天写了一个小的应用,牵涉到了使用docker部署问题,中间遇到了一些小问题,此处记录下,为以后遇到类似的问题提供一些解决思路。 1、准备使用的镜像:mysql、redis、nginx、jdk。 镜像地址: docker pull s…...
大疆上云api直播功能如何实现
概述 流媒体服务器作为直播画面的中转站,它接收推流端的相机画面,同时拉流端找它获取相机的画面。整个流程如下: 在流媒体服务器上创建流媒体应用(app),一个流媒体服务器上面可以创建多个流媒体应用约定推拉流的地址。假设流媒体服务器工作在1935端口上面,假设创建的流…...
服务器数据恢复—Raid5热备盘同步中断的数据恢复案例
服务器数据恢复环境: 某公司一台存储上有一组由15块硬盘组建的raid5阵列。raid5阵列上层是一个xfs裸分区,起始位置是0扇区。 服务器故障: raid5阵列中有一块硬盘出现故障掉线,热备盘自动上线同步数据,数据同步还没有完…...
FFmpeg开发学习:AVFormatContext结构体
1.AvFormatContext结构体 是ffmpeg中用于处理多媒体文件的核心结构体之一,属于libavformat模块,主要负责描述一个多媒体文件或流的封装格式,用来打开,读取,写入,操作媒体文件(如.MP4 .mkv .flv…...
Ceph集群2025(Squid版)导出高可用NFS集群(上集)
#创建一个CephFS 文件系统 ceph fs volume create cephfs02#创建子卷 ceph fs subvolumegroup create cephfs02 myfsg2#查看子卷 ceph fs subvolumegroup ls cephfs02[{"name": "myfsg2"} ]创建 NFS Ganesha 集群 #例子 $ ceph nfs cluster create <c…...
Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)
一、 高斯滤波 边缘检测本身属于锐化操作,对噪点比较敏感,所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后,其实把它们连起来边缘检测就算完了…...
超微服务器主板重置ipmi登录密码
超微服务器主板重置ipmi登录密码 超微服务器的ipmi登录密码不对,需要重置但是bios内并没有找到可以设置的选项。 以下是解决办法: 安装IPMITOOL apt install ipmitool -y执行以下命令加载模块: modprobe ipmi_watchdog modprobe ipmi_po…...
【react18】react项目使用mock模拟后台接口
前后端分离项目,后端还没有接口的时候,前端可以使用mockjs的技术实行假数据的模拟。这里使用的是mock的库msw实现这个业务. MSW msw是mock的工具,官网地址是在这里 使用步骤 1.安装msw npm install mswlatest --save-dev2.新建存放mock接…...
阿里云国际站代理商:如何通过Serverless调用GPU资源?
1.采用支持GPU资源的Serverless系统 选择支持GPU资源的Serverless系统,如Dilu系统,它通过内省弹性(introspectiveelasticity)机制,提供细粒度和自适应的二维协同扩展机制,支持GPU资源按需分配。 2.系统…...
CI/CD(三) 安装nfs并指定k8s默认storageClass
一、NFS 服务端安装(主节点 10.60.0.20) 1. 安装 NFS 服务端 sudo apt update sudo apt install -y nfs-kernel-server 2. 创建共享目录并配置权限 sudo mkdir -p /data/k8s sudo chown nobody:nogroup /data/k8s # 允许匿名访问 sudo chmod 777 /dat…...
Ae 效果详解:音频波形
Ae菜单:效果/生成/音频波形 Generate/Audio Waveform 音频波形 Audio Waveform效果可以可视化音频信号,能以多种方式显示音频波形,包括沿开放或闭合的蒙版路径显示。 本效果适用于所有色深模式(8-bpc、16-bpc、32-bpc)…...
S7-1200对V90 PN进行位置控制的三种方法
S7-1200系列PLC通过PROFINET与V90 PN伺服驱动器搭配进行位置控制,实现的方法主要有以下三种: ? 方法一、在PLC中组态位置轴工艺对象,V90使用标准报文3,通过MC_Power、MC_MoveAbsolute等PLC Open标准程序块进行控制, 这种控制方式属于中央控制方式(位置控制在PLC中计算,驱…...
定制表单排序,react, sort
概要 在实际开发中,我们常常碰到,一个页面根据条件不同,其展示的表单项需要动态改变位置;但是又不想写重复代码;可以试一下以下方法; 效果 使用的技术 HtmlReact,useMemoES6的扩展运算 代码 import Re…...
Vue3中keep-alive缓存组件应用场景。
文章目录 一、KeepAlive是什么?二、基本使用1.例子2.keep-alive使用 三、其他属性3.1 包含/排除3.2 最大缓存实例数3.3 缓存实例的生命周期 总结 一、KeepAlive是什么? 是一个内置组件,它的功能是在多个组件间动态切换时缓存被移除的组件实例…...
测试用例`
1.什么是测试用例 测试⽤例(Test Case)是为了实施测试⽽向被测试的系统提供的⼀组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素. 2.测试用例的万能公式(重点) 设计测试⽤例的万能公式: 功能测试界…...
React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误
大白话React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误 在 React 里,错误边界就像是一个“小卫士”,专门负责在组件出现错误时挺身而出,避免整个应用因为一个小错误就崩溃掉。接下来我会详…...
往期项目shader着色器实践效果应用合集
1、管路混色 2、水管水流效果 3、水管流入到流完效果 4、加热冷却 两 色混色 示意 XX、毒蘑菇测试效果...
go-zero: sqlx 对timestamp 格式数据问题
1.问题背景 对于goctl自动生成的model代码文件,对于非null的时间数据列,一定会产生如下问题 deleted_at\": unsupported Scan, storing driver.Value type \u003cnil\u003e into type *time.Time" 例如以上的问题,不论是插入还…...
systemd-networkd 的 *.network 配置文件详解 笔记250323
systemd-networkd 的 *.network 配置文件详解 笔记250323 查看官方文档可以用 man systemd.network命令, 或访问: https://www.freedesktop.org/software/systemd/man/latest/systemd.network.html 名称 systemd.network — 网络配置 概要 network.network 描述 一个纯…...
Axure项目实战:智慧城市APP(四)医疗信息(动态面板、选中交互应用)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧城市APP医疗信息模块 主要内容:医疗信息模块原型设计与交互 应用场景:医疗信息行业 案例展示: 案例视频&…...
机器学习正则化技术:Ridge、Lasso与ElasticNet全解析
机器学习中的正则化技术 在机器学习中,正则化技术(如 Ridge 和 Lasso)主要用于解决过拟合问题,通过限制模型复杂度提高泛化能力。以下是详细说明及实例代码: 一、正则化解决的问题 过拟合:模型在训练集表…...
【汽车传感系统架构:借助传感获取安全】
为了将车辆自动化提升到一个新的水平,设计人员研究了 LiDAR 等传感器选项的权衡,并着眼于传感系统架构。 本文引用地址:https://www.eepw.com.cn/article/202503/468584.htm 每年,约有 120 万人死于道路交通事故,还有…...
3.25-2request库
request库 一、介绍request库 (1)requests是用python语言编写的简单易用的http库,用来做接口测试的库; (2)接口测试自动化库有哪些? requests、urllib 、urllib2、urllib3、 httplib 等&…...
LangChain4j(1):初识LangChain4j
1 什么是LangChain和LangChain4j LangChain是一个大模型的开发框架,使用LangChain框架,程序员可以更好的利用大模型的能力,大大提高编程效率。如果你是一个lava程序员,那么对LangChain最简单直观的理解就是,LangChain…...
UMI-OCR Docker 部署
额外补充 Docker 0.前置条件 部署前,请检查主机的CPU是否具有AVX指令集 lscpu | grep avx 输出如下即可继续部署 Flags: ... avx ... avx2 ... 1.下载dockerfile wget https://raw.githubusercontent.com/hiroi-sora/Umi-OCR_runtime_linux/main/Do…...
python每日十题(9)
外存储器的容量一般都比较大,而且大部分可以移动,便于在不同计算机之间进行信息交流。外存储器中数据被读入内存储器后,才能被CPU读取,CPU不能直接访问外存储器。本题答案为A选项。 进程是指一个具有一定独立功能的程序关于某个数…...
Jenkins最新版,配置Gitee私人令牌和Gitee凭证
jenkins 配置Gitee私人令牌和凭证 jenkins 版本:Jenkins 2.492.2 Gitee配置 Jenkins配置gitee插件,需要先申请gitee私钥。 安装gitee插件 申请Gitee私人令牌,后面还需要添加凭证。 测试链接,并保存 配置凭证...
AI 生成内容(AIGC):从文本到视频的完整流程
近年来,AI 生成内容(AIGC, AI-Generated Content) 迅速发展,从文本、图片到音频、视频,AI 在创意内容生成方面展现出了惊人的能力。AIGC 不仅提升了内容创作效率,还降低了成本,使得普通用户也能…...
【漏洞复现】Apache Tomcat partial PUT文件上传反序列化漏洞复现(CVE-2025-24813)
❤️博客主页: iknow181 🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP 🎉欢迎大家点赞👍收藏⭐评论✍ 0x00 免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用;任何个人/组织须在合法合规…...
Spring JDBC Template与事务管理:基于XML与注解的实战指南
摘要 本文深入解析Spring JDBC Template与事务管理的核心技术,结合XML配置与注解方式两种主流方案,通过转账案例完整演示数据库操作与事务管理的最佳实践。文章涵盖JDBC Template的核心用法、事务配置语法、常见问题及性能优化建议,帮助开发…...
自动化测试selenium(Java版)
1.准备工作 1.1.下载浏览器 自动化测试首先我们要准备一个浏览器,我们这里使用谷歌(chrome)浏览器. 1.2.安装驱动管理 每一个浏览器都是靠浏览器驱动程序来启动,但是浏览器的版本更新非常快,可能我们今天测试的是一个版本,第二天发布了一个新的版本,那么我们就要重构代码,很…...
【13】Ajax爬取案例实战
目录 一、准备工作 二、爬取目标 三、初步探索:如何判断网页是经js渲染过的? 四、爬取列表页 4.1 分析Ajax接口逻辑 4.2 观察响应的数据 4.3 代码实现 (1)导入库 (2)定义一个通用的爬取方法…...
tar包部署rabbitMQ
部署erlang: 有网使用: sudo apt-get update sudo apt-get install libncurses5-dev libncursesw5-dev sudo yum install ncurses-devel 无网使用 tar zxvf ncurses.tar.gz mkdir ncurses cd ncurses-6.3/ ./configure --with-shared --without-debu…...
SpringMVC请求与响应深度解析:从核心原理到高级实践
一、SpringMVC架构与核心组件剖析 SpringMVC是基于Java的MVC设计模型实现的轻量级Web框架,其核心架构围绕前端控制器模式构建。以下是核心组件及其作用: DispatcherServlet 作为前端控制器,所有请求首先到达此处。它负责请求分发、协调组件协…...
CentOS 8 安装 Redis 全流程指南:从基础部署到远程安全配置
一、环境准备 本文以 CentOS 8.5 为例,演示 Redis 的安装、密码设置及远程连接配置。在开始前,请确保: 已通过 SSH 连接至服务器(建议使用 Root 权限)系统已联网基础工具包已安装:sudo dnf update -y &am…...