MySQL的C++简单封装

/*
*介绍: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 }
时间: 2024-10-23 02:46:46

MySQL的C++简单封装的相关文章

简单封装MySQLdb模块操作MySQL数据库

python连接mysql的connector有很多,我们选择MySQLdb 让python支持MySQLdb模块 #pip2.7 install MySQL-python 查看python2.7可使用的模块是否存在MySQLdb # ipython WARNING: IPython History requires SQLite, your history will not be saved Python 2.7.11 (default, Mar 10 2016, 09:45:30)  Typ

Java连接MySQL数据库及简单操作代码

1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘,然后将其目录下的MySQL-connector-java-5.0.5-bin.jar加到classpath里,具体如下: "我的电脑"-> "属性" -> "高级" -> "环境变量",在系统变量那里编辑clas

JDBC的简单封装

JDBC的简单封装 使用JDBC来处理数据库的接口主要有三个,即Connection,PreparedStatement和ResultSet这三个,而对于这三个接口,还可以获取不同类型的元数据,通过这些元数据类获得一些数据库的信息. 元数据(MetaData),即定义数据的数据.打个比方,就好像我们要想搜索一首歌(歌本身是数据),而我们可以通过歌名,作者,专辑等信息来搜索,那么这些歌名,作者,专辑等等就是这首歌的元数据.因此数据库的元数据就是一些注明数据库信息的数据. ① 由Connection

JDBC简单封装

/** * JDBC简单封装 * 需要借助FastJsonUtil可以参考上一篇 * @author huangxincheng * */ public class BaseDao { private static String URL; private static String USERNAME; private static String PASSWORD; private static String DRIVER; private  Connection connection; priv

对系统网络请求进行简单封装

AGConnectionNet对系统网络请求进行简单封装,可便利的进行网络请求,并将数据解析与网络请求封装在同一方法下,使用更加便利(JSON 解析采用自身解析方法, XML 解析采用第三方 ReadXML 进行解析). 方法具体参数说明 初始化方法:/*** 类方法,实例化当前数据请求对象 (单例)** @return 当前请求对象*/+ (instancetype)shareRequestData; 仅进行请求数据方法/*** 请求数据 (session 请求)** @param URLSt

iOS sqlite 增删改查 简单封装(基于 FMDB)

/** *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * *  基于 FMDB * *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整体进行操作 * *  根据 model 对象自动建表,字段类型只支持 NSString , NSIteger , float * *  用到 runtime 运行时获取 model 属性 * */ 1 // 2 // AGDatabaseManager.h 3 // 4 // Created by

简单封装sqlite3 实现实体对象与关系型数据库的相关操作【IOS】

源码如下,只有一个类文件 // //  DBHelper.h // //  Created by Jason_Msbaby on 15/10/15. //  Copyright ? 2015年 张杰. All rights reserved. // /**  *  简单封装了对于sqlite的使用 没有加入对事务及其他复杂的特性     基于传入sql语句的方式进行执行     使用单例模式     根据model对象自动创建表 只支持 NSInter NSString float 数据类型的支

httpclient4.3简单封装

对httpclient4.3版本的一个简单封装,下面是代码 /**  * httputil工具类  *   * @author rex  */ public class HttpUtil {     private static CloseableHttpClient client;     private static BasicCookieStore cookieStore;     private static HttpGet get;     private static HttpPos

mysql数据库很简单操作

进入linux系统 root   >/usr/bin/mysql -u root mysql>show databases;                    #查看数据库 mysql>use  testtable;                        #testtable 为所要查看的库,应用数据库 mysql>show tables;                          #查看所有表 mysql>desc abc_table