问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用c/c++编写一个封装链接mysql并查询返回结果的dll,供c#使用,现在就差返回了,求高手指导怎么返回结果

发布网友 发布时间:2022-04-08 20:50

我来回答

4个回答

懂视网 时间:2022-04-09 01:11

*介绍:MySQL的简单封装,支持流操作输入输出MySQL语句,然而并没有什么软用,大二学生自娱自乐,有不足求指点 *作者:MrEO *日期:2016.3.26 */

 

头文件 my_sql.h

 1 #ifndef MY_SQL_H
 2 #define MY_SQL_H
 3 
 4 #include <mysql.h>
 5 #include <iostream>
 6 #include <string>
 7 #include <iomanip>
 8 
 9 class My_sql
10 {
11 public:
12  My_sql();    //初始化API、初始化结构、设置字符集、连接数据库 
13  ~My_sql();   //释放内存、关闭服务器连接、结束服务器库、结束API库 
14  unsigned row_count();   //返回集中的行数 
15  unsigned field_count(); //返回集中的列数 
16  friend std::ostream & operator <<(std::ostream &out, My_sql &sql);
17      //通过std::ostream输出列名、结果集 
18  friend std::istream & operator >>(std::istream &in, My_sql &sql);
19      //通过std::istream输入执行SQL语句,并保存结果集地址至成员变量result 
20 // friend My_sql & operator >>(const std::string &q, My_sql &sql);
21      //通过std::string输入执行SQL语句 ,并保存结果集地址至成员变量result
22  friend My_sql & operator <<(My_sql &sql, const std::string &q);
23      //通过std::string输入执行SQL语句 ,并保存结果集地址至成员变量result
24 
25 protected:
26  bool query(const std::string &q);    //执行SQL语句,保存完整的结果集地址至成员变量result
27  My_sql & display_field_name(std::ostream &out = std::cout, int setw_n = 16); //输出列名 
28  My_sql & display_result(std::ostream &out = std::cout, int setw_n = 16); //输出结果集 
29  MYSQL mysql;   //对象 
30  MYSQL_RES *result = NULL;  //结果集 
31  MYSQL_FIELD *field = NULL; //列 
32  MYSQL_ROW row;   //行 
33 };
34 
35 #endif

 

 

实现文件 my_sql.cpp

 1 #include "my_sql.h"
 2 
 3 My_sql::My_sql()
 4 {
 5 mysql_library_init( NULL, 0, 0 );    //初始化MySQL C API库
 6 mysql_init( &mysql );     //获取或初始化MYSQL结构。
 7 mysql_options( &mysql, MYSQL_SET_CHARSET_NAME, "utf8" ); //设置字符集
 8 mysql_real_connect( &mysql, "localhost", "root", "password", "my_sql", 0, NULL, CLIENT_MULTI_STATEMENTS ); 
 9         //连接数据库
10 }
11 My_sql::~My_sql()
12 {
13 mysql_free_result( result ); //释放结果集使用的内存
14 mysql_close( &mysql );  //关闭服务器连接 
15 mysql_server_end();  //最终确定嵌入式服务器库
16 mysql_library_end();  //最终确定MySQL C API库 
17 } 
18 bool My_sql::query(const std::string &q)
19 {
20 result = NULL; 
21 mysql_query( &mysql, q.c_str() );  //执行指定为“以Null终结的字符串”的SQL查询。 
22 result = mysql_store_result( &mysql ); //检索完整的结果集至客户端 
23 if ( NULL == result ) {
24  std::cerr << "Query Error!";
25  return false;
26  }
27 return true;
28 }
29 
30 unsigned My_sql::row_count()
31 {
32 return mysql_num_rows( result ); //返回集中的行数 
33 }
34 unsigned My_sql::field_count()
35 {
36 return mysql_num_fields( result ); //返回集中的列数 
37 }
38 
39 My_sql & My_sql::display_field_name(std::ostream &out, int setw_n)
40 {
41 for ( unsigned int i = 0; i < field_count(); ++i ) {
42  out << std::setw(setw_n) << ( mysql_fetch_field_direct( result, i ) -> name );
43  //给定字段编号,返回表字段的类型。输出列名 
44  }
45 out << std::endl; 
46 return *this;
47 }
48 
49 My_sql & My_sql::display_result(std::ostream &out, int setw_n)
50 {
51 while( row = mysql_fetch_row( result ) ) //从结果集中获取下一行 
52  {
53  for(int i = 0; i < field_count(); ++i )
54   {
55  if ( NULL == row[i]) {
56   out << std::setw(setw_n) << "(NULL)";
57   }
58  else {
59   out << std::setw(setw_n) << row[i];
60   }
61  }
62  out << std::endl; 
63  }
64 return *this;
65 }
66 
67 std::ostream & operator <<(std::ostream &out, My_sql &sql)
68 {
69 sql.display_field_name(out).display_result(out);
70 //输出列名和结果集 
71 
72 return out;
73 }
74 
75 std::istream & operator >>(std::istream &in, My_sql &sql)
76 {
77 std::string q;
78 std::getline(in, q); //输入整行 
79 if ( !sql.query(q) ) {
80  exit(1);
81  }
82 return in;
83 }
84 
85 //My_sql & operator >>(const std::string &q, My_sql &sql)
86 //{
87 // if ( !sql.query(q) ) {
88 // exit(1);
89 // }
90 // return sql;
91 //}
92 
93 My_sql & operator <<(My_sql &sql, const std::string &q)
94 {
95 if ( !sql.query(q) ) {
96  exit(1);
97  }
98 return sql;
99 }

 

 

调用实例 main.cpp

 1 #include <iostream>
 2 #include "my_sql.h"
 3 
 4 using std::cin;
 5 using std::cout;
 6 
 7 int main(int argc, char* argv[])
 8 {
 9  My_sql sql;
10 sql << "SELECT * FROM my_table";
11 cout << sql;
12 cin >> sql;
13 cout << sql;
14 return 0;
15 }

 

MySQL的C++简单封装

标签:

热心网友 时间:2022-04-08 22:19

循环调用返回的结果再打印,你可以设置比如一次性查一千条,返回一千条的结果,打印出来,再查下面的,用个循环就可以了饿

热心网友 时间:2022-04-08 23:37

可以直接调用的,不用返回的吧追问主要还是要在c#中打印查找的结果

追答在C#中调用查询的结果就行了

热心网友 时间:2022-04-09 01:12

返回数组指针即可呀追问一个查找几十万条数据,数组好用吗

追答1、几十万条数据,建议分页查询,每次返回一定数量的数据,不然速度会很慢
2、返回数组没有什么问题
3、直接在c#中操作数据库,更方便,建议linq;

C#能否通过用C++把静态库lib封装到一个dll中的方式实现调用lib中的函 ...

准确情况是这样的:有一个C编写的静态库lib中包含了许多函数和结构体等,是否可以通过先用C++写个类调用lib中的函数,再将类封装到一个dll,最后通过C#来调用这个类实现最初lib中函数... 准确情况是这样的:有一个C编写的静态库lib中包含了许多函数和结构体等,是否可以通过先用C++写个类调用lib中的函数,再将类封...

c是用什么编写的 如何用eclipse编写c 用c语言编写的程序叫 c语言可以用什么编写 用c编写的程序被称为 c封装dll 用linux编写c程序 c封装是什么 c语言接口封装
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
魔兽世界8.1能量的平衡任务怎么过介绍_魔兽世界8.1能量的平衡任务怎么... 魔兽世界能量的平衡任务线怎么接? WOW魔兽世界7.0苏拉玛护月堡垒任务攻略详解介绍_WOW魔兽世界7.0苏拉玛护... 荣耀z5平板参数 办房产证面积误差如何处理 房地产权属登记纠纷处理流程是怎样的 借贷会发生什么负面 什么是非正规借贷 企业之间可以贷款吗 公司之间什么情况下可能发生借贷无效,是哪些情况? 拼多多打单发货软件?具体打单步骤是? 拼多多打单软件 拼多多打单教程的步骤有没有的? 拼多多怎样打快递单? 大疆无人机的指南针锁定是什么意思 大疆御2s档速度慢 大疆无人机遥控器上epx是什么意思 遥控器设的EXP有什么用? 大疆无人机的高级设置中的EⅩP是什么意思? 2006年世界自然灾害有哪些及原因 出自古代寓言故事的成语 古代寓言故事的成语 2006年蒙古女郎炸尸案,究竟发生了什么事情? 古代寓言成语故事 2006年,我党都发生了什么大事 出自中国古代寓言成语有哪些 2006年所发生的重大交通事故``` 关于古代寓言故事的成语,谢谢 古代寓言、历史故事的成语 表示中国古代寓言的成语有哪些 今天中午切辣椒时,手指被辣椒辣着了,到现在还很痛,怎么办? 微信升级7.0无法打开doc 梦见别人杀凶猛的动物扒皮来烤? 制作移动网站设计的关键是什么? 怎么创建一个移动端网站 移动建站设计中的配色方案是什么? 梦见别人打死两头野猪是什么意思? 梦到别人打死一条狗,很心疼 电动剃须刀可以用剃须泡吗? 电动剃须刀需要剃须泡沫吗 用电动剃须刀还需要刮胡泡吗 用电动剃须刀能不能用剃须沫? 本人现在有当前逾期,急需借款3.5W,在线求助? 信贷逾期透支显示账户1学分数5最长逾期透支5单月最高逾期70243是啥意思? 《西行纪》1-3季全集高清完整版视频免费在线观看,求百度网盘资源_百度... 西行纪动画的原著在哪可以读到? 动漫西行纪在哪里能看全集? 求好心人分享西行纪第一季01免费在线观看资源 什么是信贷指标? 求好心人分享西行纪第二季免费在线观看资源