C++ MySQL封装类

#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 = 1;
    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, 0)){
        return -1;
    }
    return 1;
}

int mysql_db::mysql_noResult_query(const char * sql)
{
    if (mysql_query(&sqlCon, sql) != 0){
        return -1;
    }
    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) != 0){
        return -1;
    }

    if(!(m_pResult = mysql_use_result(&sqlCon))){
        return -1;
    }
    int i = 0;

    int count = mysql_num_fields(m_pResult);
    while(m_Row = mysql_fetch_row(m_pResult)){
        vector<string> vVal;
        for (int j = 0; 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) != 0){
        return -1;
    }
    if(!(m_pResult = mysql_use_result(&sqlCon))){
        return -1;
    }
    int i = 0;

    int count = mysql_num_fields(m_pResult);
    while(m_Row = mysql_fetch_row(m_pResult)){
        for (int j = 0; 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 (-1 == mydb.mysql_open("Localhost", "root", "123456", "electronicpolice", MYSQL_PORT))
        cout << mydb.mysql_lasterror() << endl;

    //创建一个库
    string sql = "create database if not exists database_test";
    if ( -1 == mydb.mysql_noResult_query(sql.c_str()))
        cout << mydb.mysql_lasterror() << endl;

    //use 库
    sql = "use database_test";
    if ( -1 == 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 ( -1 == mydb.mysql_noResult_query(sql.c_str()))
        cout << mydb.mysql_lasterror() << endl;

    //插入2条数据
    sql = "insert into table_test (name,age) values(‘newsoul‘,‘25‘)";
    if ( -1 == mydb.mysql_noResult_query(sql.c_str()))
        cout << mydb.mysql_lasterror() << endl;
    sql = "insert into table_test (name,age) values(‘百度‘,‘100‘)";
    if ( -1 == 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 (-1 == 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 = 0;
    while (i++ < 100){
        map<int,vector<string>> map_res;
        if (-1 == 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+1<< "条 : ";
            for (int i=0;i<it->second.size();i++)
            {
                cout << it->second[i] << "\t";
            }
            cout << endl;
        }
    }

    system("pause");
    return 0;
}
时间: 2024-08-02 12:12:51

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

PHP PDO操作MYSQL封装类

<?php /**  * auther soulence  * 调用数据类文件  * modify 2015/06/30  */ class DBConnect {     private $dbname = null;     private $pdo = null;     private $persistent = false;     private $statement = null;     private $lastInsID = null;     private static 

mysql封装类

<?phpclass mysql {    private $db_host; //数据库主机    private $db_user; //数据库用户名    private $db_pwd; //数据库用户名密码    private $db_database; //数据库名    private $conn; //数据库连接标识;    private $result; //执行query命令的结果资源标识    private $sql; //sql执行语句    private $ro

简单数据库数据导出工具总结笔记

简单界面: 1. 左边用ListBox控件,添加一个控件变量m_lb,将数据从数据库导出,然后用m_lb.AddString()添加到ListBox中显示. 在OnInitDialog()中加入.CDBBase是封装的mysql类,一开始从数据库导出的汉字显示乱码,因为数据库用的utf-8,而程序这边用的gbk, 后来加了pDBbase->DBexecute("SET NAMES 'GB2312'");显示正确. 获取ListBox中元素个数用m_lb.GetCount(),返回

面向对象的类访问和对象访问的区别【this以及类访问】、静态成员的访问区别、类常量等、继承和重写、访问修饰限定符、冒泡排序

1.mysql封装类 在构造函数中定义初始化数据库连接的相关参数[因为实例化对象时传入的参数是该对象的唯一参数入口]但是不需要再构造函数中进行冗余定义,而是在构造函数中进行调用类中的其他方法的方式来实现构造函数的设置工作[这样的模块分离使逻辑更加简单] [重点]2.静态成员相当于每次实例化对象之间是有关系的[例如计数功能]因为每次实例化类时创建的对象占用的空间都是新创建的,这一点需要注意,所以同一个类下的对象之间的变量并没有交互的效果.[回想起当初函数中的静态局部变量的使用][延生到静态全局变量

PHP秒杀系统 高并发高性能的极致挑战 视频教程

第1章 课程介绍 1-1 课程导学 1-2 课程目标 1-3 秒杀系统特点 1-4 课程技术分析第2章 系统环境搭建 2-1 技术选型分析之基础服务 2-2 技术选型分析之CDN 2-3 技术选型分析之负载均衡 2-4 开发环境准备 2-5 MySQL封装类 2-6 Redis封装类 2-7 调试封装类(上)有点小声 2-8 调试封装类(下)第3章 系统设计 3-1 系统设计之项目基本功能 3-2 系统设计之项目流程 3-3 数据库设计之活动信息表 3-4 数据库设计之商品信息表 3-5 数据库

PHP秒杀系统 高并发高性能的极致挑战

第1章 课程介绍秒杀系统在各种网站和应用中经常会用到.本课程从基本的系统设计和基础功能开始教导大家用PHP来设计和实现秒杀系统,并且为海量并发提供更高级的技术方案和实现手段.1-1 课程导学1-2 课程目标1-3 秒杀系统特点1-4 课程技术分析 第2章 系统技术选型分析本章节需要大家掌握基础的LNMP平台的开发,提供基础的数据封装类,让后续的开发得心应手.我们会讲解到系统环境的技术选型,我们采用的数据库是Mysql,还用到Redis来作为高性能缓存, 为了让大家不拘泥于框架的选择,巩固基础知识

使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能

使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能 要求:写一个省市区(或者年月日)的三级联动,实现地区或时间的下拉选择. 实现技术:php ajax 实现:省级下拉变化时市下拉区下拉跟着变化,市级下拉变化时区下拉跟着变化. 使用chinastates表查询 Ajax加载数据 1.这是chinastates表 2.做一个简单php:Ajax_eg.php <!DOCTYPE html><html>    <head>        <meta c

php数据库操作封装类

<?php /** * Desc: php操作mysql的封装类 * Author zhifeng * Date: 2015/04/15 * 连接模式:PDO */ class MMysql { protected static $_dbh = null; //静态属性,所有数据库实例共用,避免重复连接数据库 protected $_dbType = 'mysql'; protected $_pconnect = true; //是否使用长连接 protected $_host = 'local

php中mysql数据库操作类

talk less and show code: <?php/** *以下代码用于数据库操作类的封装* * @author rex<[email protected]> * @version 1.0* @since 2015*/ class Mysql{ //数据库连接返回值 private $conn; /*** [构造函数,返回值给$conn]* @param [string] $hostname [主机名]* @param [string] $username[用户名]* @par