#ifndef MYSQL_MANAGER_H
#define MYSQL_MANAGER_H
#include <Winsock2.h>
#include "mysql.h"
#include <string>
#include <vector>
#include <map>
using namespace std; class mysql_db
{
public:
mysql_db();
~mysql_db();
public:
/*
mysql_open()
return : 1 OK
-1 失败
*/
int mysql_open(const char * host, const char * user, const char * password, const char * database, unsigned int port );
/*
mysql_noResult_query();
非select语句查询
return >0 成功, 为受影响的行数
-1 失败
*/
int mysql_noResult_query(const char * sql );
/*
mysql_select_query();
有结果集的查询
return >0 ok 返回结果集条数
-1 失败
map_results first = 行 second = values
*/
int mysql_select_query(const char * sql, map<int,vector<string>> & map_results);
/*
mysql_select_SingleLine_query();
只有一条数据 , 或者只有一个字段 N 条的查询. 直接调用vector即可
*/
int mysql_select_SingleLine_query(const char * sql, vector<string> & v_results);
/*
mysql_lasterror();
返回最近一次错误信息
*/
string mysql_lasterror();
private:
MYSQL sqlCon;
MYSQL_RES *m_pResult;
MYSQL_ROW m_Row;
}; #endif
#include "stdafx.h"
#include "managesql.h" mysql_db::mysql_db()
{
mysql_init(&sqlCon);// mysql 初始化
}
mysql_db::~mysql_db()
{
mysql_close(&sqlCon);// 关闭连接
} int mysql_db::mysql_open(const char * host, const char * user, const char * password, const char * database, unsigned int port)
{
char nvalue = ;
mysql_options(&sqlCon, MYSQL_OPT_RECONNECT, (char *)&nvalue);// 断线自动重连
mysql_options(&sqlCon, MYSQL_SET_CHARSET_NAME, "gbk");// set name gbk 中文乱码问题
if (!mysql_real_connect(&sqlCon, host, user, password, database, port, NULL, )){
return -;
}
return ;
} int mysql_db::mysql_noResult_query(const char * sql)
{
if (mysql_query(&sqlCon, sql) != ){
return -;
}
return (int)mysql_affected_rows(&sqlCon);
} int mysql_db::mysql_select_query(const char * sql, map<int, vector<string>> & map_results)
{
if (mysql_query(&sqlCon, sql) != ){
return -;
} if(!(m_pResult = mysql_use_result(&sqlCon))){
return -;
}
int i = ; int count = mysql_num_fields(m_pResult);
while(m_Row = mysql_fetch_row(m_pResult)){
vector<string> vVal;
for (int j = ; j < count; j++){
vVal.push_back(m_Row[j]);
}
map_results[i++] = vVal;
}
mysql_free_result(m_pResult);
return i;
} int mysql_db::mysql_select_SingleLine_query(const char * sql, vector<string> & v_results)
{
if (mysql_query(&sqlCon, sql) != ){
return -;
}
if(!(m_pResult = mysql_use_result(&sqlCon))){
return -;
}
int i = ; int count = mysql_num_fields(m_pResult);
while(m_Row = mysql_fetch_row(m_pResult)){
for (int j = ; j < count; j++){
v_results.push_back(m_Row[j]);
}
}
mysql_free_result(m_pResult);
return i;
} string mysql_db::mysql_lasterror()
{
return mysql_error(&sqlCon);
}
// ConsoleApplication2.cpp : Defines the entry point for the console application.
// #include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include "ManageSQL.h"
#include <vld.h>
using namespace std; int main()
{
mysql_db mydb; //打开.. 连接
if (- == mydb.mysql_open("Localhost", "root", "", "electronicpolice", MYSQL_PORT))
cout << mydb.mysql_lasterror() << endl; //创建一个库
string sql = "create database if not exists database_test";
if ( - == mydb.mysql_noResult_query(sql.c_str()))
cout << mydb.mysql_lasterror() << endl; //use 库
sql = "use database_test";
if ( - == mydb.mysql_noResult_query(sql.c_str()))
cout << mydb.mysql_lasterror() << endl; //创建一张表
sql = "create table if not exists table_test(id int not null auto_increment, name varchar(20) not null, age int not null ,primary key (id) )";
if ( - == mydb.mysql_noResult_query(sql.c_str()))
cout << mydb.mysql_lasterror() << endl; //插入2条数据
sql = "insert into table_test (name,age) values('newsoul','25')";
if ( - == mydb.mysql_noResult_query(sql.c_str()))
cout << mydb.mysql_lasterror() << endl;
sql = "insert into table_test (name,age) values('百度','100')";
if ( - == mydb.mysql_noResult_query(sql.c_str()))
cout << mydb.mysql_lasterror() << endl; //mysql_select_SingleLine_query 演示
sql = "select * from table_test where id=1 ";
vector<string> vResults;
if (- == mydb.mysql_select_SingleLine_query(sql.c_str(),vResults))
cout << mydb.mysql_lasterror() << endl; //遍历结果集
cout << "select * from table_test where id=1的结果: " << endl;
for (vector<string>::iterator it = vResults.begin(); it != vResults.end(); it++)
cout << (*it) << endl; cout << endl << endl;
//mysql_select_query 演示
sql = "select * from table_test"; int i = ;
while (i++ < ){
map<int,vector<string>> map_res;
if (- == mydb.mysql_select_query(sql.c_str(),map_res))
cout << mydb.mysql_lasterror() << endl; //遍历...
cout << "select * from table_test的结果:" << endl;
for (map<int,vector<string>>::iterator it = map_res.begin(); it != map_res.end(); it++){
cout << "第" << it->first+<< "条 : ";
for (int i=;i<it->second.size();i++)
{
cout << it->second[i] << "\t";
}
cout << endl;
}
} system("pause");
return ;
}

C++ MySQL封装类的更多相关文章

  1. 简单的mysql封装类

    class mysql{ private $host; private $user; private $pwd; private $dbname; private $charset; private ...

  2. mysql封装类

    <?php ;         ;         $cnt = mysql_num_rows($rsPtr);         ;         ) {             $id =  ...

  3. 【Python】python3.6 操作mysql

    1.首先安装mysqldb 下载 mysqldb 使用命令 pip3 install mysqlclient-1.3.12-cp36-cp36m-win32.whl 下载地址: mysqlclient ...

  4. PHP之面向对象PHP之面向对象(面向对象是什么)

    PHP之面向对象(面向对象是什么) 一.总结 一句话总结: 面向对象就是类:类都要 属性 和 方法 比如人:属性比如身高体重,方法比如吃饭喝水 面向对象中 ,方法即是函数 : 属性即是变量 ,只是面相 ...

  5. 资源(1)----封装类(连接数据库mysql,分页)

    一,链接MYSQL数据库 class DBDA{ public $host="localhost";//服务器地址 public $uid="root";//数 ...

  6. C# 应用 - 封装类访问 Mysql 数据库

    个人经历的项目主要都是用 Postgresql 或 Oracle 数据库,本文非原创,从他处整理而来. 1. 库类 mysql.data.dll using MySql.Data.MySqlClien ...

  7. mysql 数据库封装类:返回索引、关联、字符串数组;分页查询封装类 :$page=new Page(表的总条数,每页的条数);$sql = "".$page->limit; echo $page->fpage();

    <?php class czy { public $host="localhost"; //地址 public $uid="root"; //用户名 pu ...

  8. MYSQL数据库封装类

    <?phpclass DBDA{    public $host="localhost";    public $uid="root";    publi ...

  9. php--学习封装类 (一)(操作mysql数据库的数据访问)

    <?php class DBDA //定义一个类 { //定义成员变量,不能直接定义,前面要加上public或者是private public $host = "localhost&q ...

随机推荐

  1. STM32 的系统滴答定时器( Systick) 彻底研究解读

    作者:王健 前言 SysTick 比起那些 TIM 定时器可以说简单多啦~~~~~哥的心情也好了不少, 嘎嘎!! ARM Cortex-M3 内核的处理器内部包含了一个 SysTick 定时器,它是一 ...

  2. Linux三剑客之awk精讲(基础与进阶)

    第1章 awk基础入门 要弄懂awk程序,必须熟悉了解这个工具的规则.本实战笔记的目的是通过实际案例或面试题带同学们熟练掌握awk在企业中的用法,而不是awk程序的帮助手册. 1.1 awk简介 一种 ...

  3. [Qt5] 使用Qt设计器绘制主窗口

    实践代码: git clone https://github.com/dilexliu/learn_qt5.git Step1: Qt设计器绘制窗口 保存会得到一个文件: mainwindow.ui ...

  4. C语言的常用的数据类型有哪些_所占字节分别是多少

    整型 整形打印使用%d short:短整型,占16位,2个字节 int:占32位,4个字节 long:长整型,占4个字节,本来意思比int更多,但是目前来看基本都是和int一样 浮点型 浮点型计算会影 ...

  5. Python学习第三课——运算符

    # 运算符 + - * / **(幂) %(取余) //(取整) num=9%2 print("余数为"+(str)(num)) #运算结果为 1 num1=9//2 print( ...

  6. 16核锐龙9延期真正原因 A饭热情太恐怖了

    锐龙9 3950X处理器是AMD发布的首款16核游戏处理器,原本会在9月上市,上周末AMD官方宣布它会延期2个月上市,会在11月跟锐龙Threadripper三代处理器一起上市. 锐龙9 3950X的 ...

  7. 四、java基础-面向过程_对象_类中可出现的因素

    1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...

  8. SpringCloud学习之Zuul路由转发、拦截和熔断处理(七)

    Spring Cloud Zuul 服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能. Sp ...

  9. struts2--验证器

    1.输入验证: --struts2提供了一些基于Xwork Validation Framework的内建验证程序,使用这些验证程序不需要变编程,只要在一个XML文件里进行声明,声明的内容如下: &g ...

  10. C# 自定义控件容器,设计时可添加控件

    本分步指南介绍在将 UserControl 放在 Windows 窗体上之后,如何将 UserControl 对象用作设计时控件容器.可能会有这样的情况:您想将一个控件拖到 UserControl 中 ...