C++中istream和stringstream的使用

数据库 同时被 2 个专栏收录
11 篇文章 0 订阅
19 篇文章 0 订阅

   上个项目完成第一个版本开发,写的部分由于是底层SDK。测试的时候没有BUG可改,于是又回到本部门开始做数据库维护的工作。数据库表设计已基本成型,主要是添加或删除一些字段。麻烦的是要为数据库表建立触发器,而且这些触发器功能都一样,就是在数据更新的时候写历史记录。一百多个表,一个一个写不知道写到什么时候,甚至有些表字段就差不多有一百个字段。于是下载一个MySQL的C++连接器,不知道为什么,下源码居然编译通不过,里面甚至还有一些基本的标识符不识别的错误。真不知道Oracle想把MySQL怎么样了,上传代码不用检查吗?下了一个编译好非安装的库,加入工程使用,居然连基本的getString函数都报错。恩,不是我一个人遇见,其他人的解决方法是使用getBlob代替。于是就是我标题中的istream流了,使用方法如:

string svalue;

std::istream* id = result->getBlob(sfield.c_str());//从结果集中取回字段sfield.c_str()的值

*id >> (svalue);//把该值输出给svalue;以前还真没如此使用过istream。


下面还是使用MySQL连接器引出的问题,该问题导致我化了一天的时间,恩。有如下几个问题:

1、MySQL连接器库对string进行封装成SQLString,并重载了该类的构造函数接收string,char[]及char*等类型作为参数来构造SQLString对象,于是导致在调用excute函数的时候传递给string字符串时,编译器不会报告类型不匹配,因为会构造临时SQLString对象,但是在运行时由于内存结构不一样会导致崩掉。至于为什么string给SQLString中的string不行,我也还不清楚。最后改成string的data()或c_str()函数返回char[]后传给excute函数解决。有一点变态的是封装后的SQLString再我直接构造一个字符串的时候编译器总是提示指针错误,其实是没问题的,只是在SQLString的前几个字符为被使用吧。

2、我一直认为DELIMITER命令式MySQL服务器提供的命令,所以我在编程的时候在前面加了一个DELIMITER $$命令,由于该命令后第1点同时存在,导致我未搞清楚什么原因。其实DELIMITER是告诉客户端什么时候可以提交一个SQL语句,由于我是在程序中处理,所以是不需要改命令的。在用户手动输入的时候,由于默认情况下回车会提交,导致多行的命令不能完整提交而出现该命令。正因为这,我找不到原因,于是加了连接器提供的异常处理机制。是网上一个老兄提供的代码,如下:


cout<< "# ERR: SQLException in " << __FILE__;
cout<< "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout<< "# ERR: " << e.what();
cout<< " (MySQL error code: " << e.getErrorCode();
cout<< ", SQLState: " << e.getSQLState().data() << " )" << endl;

可我是在MFC下,cout的东西看不到,而且我不想去改写这些代码,印象中找到了stringstream类。

处理如下,需要包含sstream头文件。

stringstream sException;

sException << "# ERR: SQLException in " << __FILE__;
sException << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
sException << "# ERR: " << e.what();
sException << " (MySQL error code: " << e.getErrorCode();
//sException << ", SQLState: " << e.getSQLState().data() << " )" << endl; //这句不知道为什么会崩掉
string str = sException.str();//这样就先输出到stringstream对象中,在从中提取出字符串就OK了。
AfxMessageBox(str.data());


总的来说,感觉上MySQL提供的这些连接器不太专业,感觉做为C++程序员的我也不太专业,连C++基本的输入输出流都使用不熟。不过问题解决了就行

  • 0
    点赞
  • 1
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

<h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;">期末</span><span style="font-size:14px;background-color:#fbeeb8;">考点</span><span style="font-size:14px;">都对应</span><span style="font-size:14px;background-color:#fbeeb8;">详解视频</span><span style="font-size:14px;">,</span><span style="font-size:14px;"><span style="color:#e03e2d;">基础阶段</span></span><span style="font-size:14px;">内容全面,语言通俗易懂(翻译书的语言为</span><span style="font-size:14px;background-color:#fbeeb8;">人话)</span><span style="font-size:14px;">,</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;">老师精心研究</span><span style="font-size:14px;background-color:#fbeeb8;">百份</span><span style="font-size:14px;">考卷,总结每一个考点,同时结合你肯定可以听懂的骚话,</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;background-color:#fbeeb8;">扫清你的数据库系统盲区</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;"><span style="color:#e03e2d;">真题阶段</span></span><span style="font-size:14px;">为你提供</span><span style="font-size:14px;background-color:#fbeeb8;">解题思路</span><span style="font-size:14px;">,培养你的</span><span style="font-size:14px;background-color:#fbeeb8;">解题思维</span><span style="font-size:14px;">,同时</span><span style="font-size:14px;background-color:#fbeeb8;">点明考点</span><span style="font-size:14px;">,结合文档进行重点解读,加深你的印象.</span> </h4> <h4 style="font-weight:500;font-size:1.5rem;font-family:'PingFang SC', 'Hiragino Sans GB', Arial, 'Microsoft YaHei', Verdana, Roboto, Noto, 'Helvetica Neue', sans-serif;color:#222226;background-color:#ffffff;text-align:center;"> <span style="font-size:14px;color:#3598db;">只为你的高分,我们交个朋友!让每位学生都可以学的起!!</span> </h4> <p> <span style="font-size:14px;color:#3598db;"><img src="https://img-bss.csdnimg.cn/202103040423318088.png" alt="" width="788" height="450" /></span> </p>
<p> <span style="font-family:-apple-system, system-ui, 'PingFang SC', Helvetica, Tahoma, Arial, 'Microsoft YaHei', 微软雅黑, 黑体, Heiti, sans-serif, SimSun, 宋体, serif;font-size:12px;background-color:#ffffff;">1、系统全面介绍了Python的基础语法 </span> </p> <p> <span style="font-family:-apple-system, system-ui, 'PingFang SC', Helvetica, Tahoma, Arial, 'Microsoft YaHei', 微软雅黑, 黑体, Heiti, sans-serif, SimSun, 宋体, serif;font-size:12px;background-color:#ffffff;">2、在课程融入了算法思想 </span> </p> <p> <span style="font-family:-apple-system, system-ui, 'PingFang SC', Helvetica, Tahoma, Arial, 'Microsoft YaHei', 微软雅黑, 黑体, Heiti, sans-serif, SimSun, 宋体, serif;font-size:12px;background-color:#ffffff;">3、帮助初学者厘清逻辑,掌握Python的主体脉络 </span> </p> <p> <span style="font-family:-apple-system, system-ui, 'PingFang SC', Helvetica, Tahoma, Arial, 'Microsoft YaHei', 微软雅黑, 黑体, Heiti, sans-serif, SimSun, 宋体, serif;font-size:12px;background-color:#ffffff;">4、从全方位立体角度解析知识点 </span> </p> <p> <span style="font-family:-apple-system, system-ui, 'PingFang SC', Helvetica, Tahoma, Arial, 'Microsoft YaHei', 微软雅黑, 黑体, Heiti, sans-serif, SimSun, 宋体, serif;font-size:12px;background-color:#ffffff;">5、实战案例驱动、课程包含近200个相关案例、边讲解边实操</span> </p> <p> <span style="font-family:-apple-system, system-ui, 'PingFang SC', Helvetica, Tahoma, Arial, 'Microsoft YaHei', 微软雅黑, 黑体, Heiti, sans-serif, SimSun, 宋体, serif;font-size:12px;background-color:#ffffff;"><br /> </span> </p> <p> <span style="font-family:-apple-system, system-ui, 'PingFang SC', Helvetica, Tahoma, Arial, 'Microsoft YaHei', 微软雅黑, 黑体, Heiti, sans-serif, SimSun, 宋体, serif;font-size:12px;background-color:#ffffff;"><img src="https://img-bss.csdnimg.cn/202107120808123109.png" alt="" /><br /> </span> </p>
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求:模拟浏览器的行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储:将提取到的数据存储到硬盘或者内存。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
<p style="font-size:16px;"> 涉及内容: </p> <p style="font-size:16px;"> 注意,学习此视频必须有一定基础的同学 </p> <p style="font-size:16px;"> 区块链相关知识、钱包相关知识、p2p相关知识、uniapp相关知识 </p> <p style="font-size:16px;">     01前言 </p> <p style="font-size:16px;">     02成果展示 </p> <p style="font-size:16px;">     03前言区块链概念和六层模型介绍 </p> <p style="font-size:16px;">     04翻译一个带币的js简单例子原理介绍 </p> <p style="font-size:16px;">     05区块链springboot工程搭建和区块相关实现 </p> <p style="font-size:16px;">     06区块链加密算法相关介绍以及实现 </p> <p style="font-size:16px;">     07钱包相关实体类介绍 </p> <p style="font-size:16px;">     08redis数据库等配置和工具类的介绍 </p> <p style="font-size:16px;">     09区块链相关实体类介绍 </p> <p style="font-size:16px;">     10挖矿相关实体类和POW相关的介绍 </p> <p style="font-size:16px;">     11 p2p 点对点 server和client代码 </p> <p style="font-size:16px;">     12 p2p 原理的简单介绍 </p> <p style="font-size:16px;">     13 节点钱包相关启动实现 </p> <p style="font-size:16px;">     14 web控制层逻辑基础代码 </p> <p style="font-size:16px;">     15 web功能的整体介绍 </p> <p style="font-size:16px;">     16 web钱包功能-创建钱包账户的完整功能实现 </p> <p style="font-size:16px;">     17 web钱包功能-获取挖矿钱包信息和根据钱包地址获取信息 </p> <p style="font-size:16px;">     18 web钱包功能-获取当前节点所有钱包 </p> <p style="font-size:16px;">     19 全节点钱包轻钱包心化钱包的概念 </p> <p style="font-size:16px;">     20 p2p三个节点的相关配置并启动 </p> <p style="font-size:16px;">     21 p2p 节点添加相关流程 </p> <p style="font-size:16px;">     22 p2p 节点列表相关实现 </p> <p style="font-size:16px;">     23 区块相关挖矿与挖矿奖励等讲解 </p> <p style="font-size:16px;">     24 区块链相关的查询操作 </p> <p style="font-size:16px;">     25 交易转账相关逻辑 </p> <p style="font-size:16px;">     26 三台机器节点运行 uniapp开发前准备 </p> <p style="font-size:16px;">     27 uniapp首页和我的页面实现 </p> <p style="font-size:16px;">     28 uniapp 节点钱包和节点钱包列表展示 </p> <p style="font-size:16px;">     29 uniapp添加节点,节点列表挖矿区块链查询等 </p> <p style="font-size:16px;">     30 uniapp我的钱包转账查询交易等 </p> <p style="font-size:16px;">     31 课程总结以及代码资料等相关说明 </p> <div> <br /></div>
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值