MySQL的C++简单封装
/*
*介绍:MySQL的简单封装,支持流操作输入输出MySQL语句,然而并没有什么软用,大二学生自娱自乐,有不足求指点
*作者:MrEO
*日期:2016.3.26
*/
头文件 my_sql.h
#ifndef MY_SQL_H
#define MY_SQL_H #include <mysql.h>
#include <iostream>
#include <string>
#include <iomanip> class My_sql
{
public:
My_sql(); //初始化API、初始化结构、设置字符集、连接数据库
~My_sql(); //释放内存、关闭服务器连接、结束服务器库、结束API库
unsigned row_count(); //返回集中的行数
unsigned field_count(); //返回集中的列数
friend std::ostream & operator <<(std::ostream &out, My_sql &sql);
//通过std::ostream输出列名、结果集
friend std::istream & operator >>(std::istream &in, My_sql &sql);
//通过std::istream输入执行SQL语句,并保存结果集地址至成员变量result
// friend My_sql & operator >>(const std::string &q, My_sql &sql);
//通过std::string输入执行SQL语句 ,并保存结果集地址至成员变量result
friend My_sql & operator <<(My_sql &sql, const std::string &q);
//通过std::string输入执行SQL语句 ,并保存结果集地址至成员变量result protected:
bool query(const std::string &q); //执行SQL语句,保存完整的结果集地址至成员变量result
My_sql & display_field_name(std::ostream &out = std::cout, int setw_n = ); //输出列名
My_sql & display_result(std::ostream &out = std::cout, int setw_n = ); //输出结果集
MYSQL mysql; //对象
MYSQL_RES *result = NULL; //结果集
MYSQL_FIELD *field = NULL; //列
MYSQL_ROW row; //行
}; #endif
实现文件 my_sql.cpp
#include "my_sql.h" My_sql::My_sql()
{
mysql_library_init( NULL, , ); //初始化MySQL C API库
mysql_init( &mysql ); //获取或初始化MYSQL结构。
mysql_options( &mysql, MYSQL_SET_CHARSET_NAME, "utf8" ); //设置字符集
mysql_real_connect( &mysql, "localhost", "root", "password", "my_sql", , NULL, CLIENT_MULTI_STATEMENTS );
//连接数据库
}
My_sql::~My_sql()
{
mysql_free_result( result ); //释放结果集使用的内存
mysql_close( &mysql ); //关闭服务器连接
mysql_server_end(); //最终确定嵌入式服务器库
mysql_library_end(); //最终确定MySQL C API库
}
bool My_sql::query(const std::string &q)
{
result = NULL;
mysql_query( &mysql, q.c_str() ); //执行指定为“以Null终结的字符串”的SQL查询。
result = mysql_store_result( &mysql ); //检索完整的结果集至客户端
if ( NULL == result ) {
std::cerr << "Query Error!";
return false;
}
return true;
} unsigned My_sql::row_count()
{
return mysql_num_rows( result ); //返回集中的行数
}
unsigned My_sql::field_count()
{
return mysql_num_fields( result ); //返回集中的列数
} My_sql & My_sql::display_field_name(std::ostream &out, int setw_n)
{
for ( unsigned int i = ; i < field_count(); ++i ) {
out << std::setw(setw_n) << ( mysql_fetch_field_direct( result, i ) -> name );
//给定字段编号,返回表字段的类型。输出列名
}
out << std::endl;
return *this;
} My_sql & My_sql::display_result(std::ostream &out, int setw_n)
{
while( row = mysql_fetch_row( result ) ) //从结果集中获取下一行
{
for(int i = ; i < field_count(); ++i )
{
if ( NULL == row[i]) {
out << std::setw(setw_n) << "(NULL)";
}
else {
out << std::setw(setw_n) << row[i];
}
}
out << std::endl;
}
return *this;
} std::ostream & operator <<(std::ostream &out, My_sql &sql)
{
sql.display_field_name(out).display_result(out);
//输出列名和结果集 return out;
} std::istream & operator >>(std::istream &in, My_sql &sql)
{
std::string q;
std::getline(in, q); //输入整行
if ( !sql.query(q) ) {
exit();
}
return in;
} //My_sql & operator >>(const std::string &q, My_sql &sql)
//{
// if ( !sql.query(q) ) {
// exit(1);
// }
// return sql;
//} My_sql & operator <<(My_sql &sql, const std::string &q)
{
if ( !sql.query(q) ) {
exit();
}
return sql;
}
调用实例 main.cpp
#include <iostream>
#include "my_sql.h" using std::cin;
using std::cout; int main(int argc, char* argv[])
{
My_sql sql;
sql << "SELECT * FROM my_table";
cout << sql;
cin >> sql;
cout << sql;
return ;
}
MySQL的C++简单封装的更多相关文章
- mysql使用pdo简单封装select语句
最终代码: function pdo_array_query($pdo, $table_name, $data, $fields=array('*')){ //Will contain SQL sni ...
- 对pymysql的简单封装
#coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...
- DBUtils-对JDBC简单封装的开源工具类库
DBUtils 是对JDBC简单封装的开源工具类 详细介绍地址: https://baike.baidu.com/item/Dbutils/10655914?fr=aladdin 在使用DBUtil ...
- 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用
进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...
- .net core 中简单封装Dapper.Extensions 并使用sqlsuger自动生成实体类
引言 由公司需要使用dapper 同时支持多数据库 又需要支持实体类 又需要支持sql 还需要支持事务 所以采用了 dapper + dapperExtensions 并配套 生成实体类小工具的方 ...
- pymysql DAO简单封装
#!/usr/bin/env python # -*-coding:utf-8 -*- # # 无法执行多个query,self.conn.close()放在CdbConn类的单独函数中,每次quer ...
- python Mysql数据库连接池组件封装(转载)
以前一直在用Java来开发,数据库连接池等都是有组件封装好的,直接使用即可,最近在尝试Python的学习,碰到了和数据库打交道的问题,和数据库打交道我们都知道,数据库连接池必不可少,不然要么就是程序异 ...
- JDBC【2】-- JDBC工作原理以及简单封装
目录 1. 工作原理 1.1 加载驱动 1.1.1 类加载相关知识 1.1.2 为什么JDK 1.6之后不需要显示加载了? 1.2 驱动加载完成了,然后呢? 2. 简单封装 1. 工作原理 一般我们主 ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
随机推荐
- BZOJ1465: 糖果传递
1465: 糖果传递 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 277 Solved: 105[Submit][Status] Descriptio ...
- Linux Shell编程(22)——时间/日期 命令
date直接调用, date 就会打印日期和时间到 stdout 上. 这个命令有趣的地方在于它的格式化和分析选项上.time输出统计出来的命令执行的时间.touch这是一个用来更新文件被存取或修改的 ...
- Eclipse的下载和安装
下载 Android开发首选Eclipse for Android Developers版本,里面集成了ADT(Android Development Tools). 下载页面:http://www. ...
- 折腾iPhone的生活——通过设置使iPhone更省电
入手了iPhone5s,上手感觉iPhone没有过去省电了,可能是iOS7的关系,也有可能是我一直在下应用的关系,但是iPhone5s那1500mA的电池的确是有点真的不那么够用的样子,通过设置来省电 ...
- 【原】centos6.5下cdh4.6 Oozie安装
0.oozie只需安装在一台服务器上,这里选择在namenode上来安装:安装用户为cloud-user 1.安装Oozie包: sudo yum install -y oozie oozie- ...
- Centos6快速yum lamp
yum install httpd httpd-devel mysql mysql-server mysql-devel php php-mysql php-common php-gd php-mb ...
- zoj 1671 Walking Ant【简单bfs】
Walking Ant Time Limit: 2 Seconds Memory Limit: 65536 KB Ants are quite diligent. They sometime ...
- Graphs and Minimum Cuts(Karger's Min-Cut Algorithm)
Graphs Two ingredients 1. vertices (nodes) v 2. edges(undirected or directed) Examples: road networ ...
- 415. Add Strings
没什么限定的话,先翻转,在一位一位加,记得进位就行了.. public class Solution { public String addStrings(String num1, String nu ...
- UVA 753 - A Plug for UNIX(网络流)
A Plug for UNIX You are in charge of setting up the press room for the inaugural meeting of the U ...