`
suiyuan0808
  • 浏览: 152877 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Linux下C++访问MySQL<一>

    博客分类:
  • c++
阅读更多
/*
配置开发环境
首先需要编译、安装MySQL,安装完成后,将MySQL目录中的lib目录添加到环境变量中。

新建C/C++工程,把$MYSQL_ROOT/include添加到编译环境的包含路径下面。在编译选项中,增加$MYSQL_ROOT/lib目录。在Link选项中增加-lmysqlclient(已经把lib目录增加到系统环境变量中),或者直接引用libmysqlclient.so文件。
*/


#ifndef MYSQLMANAGER_H_   
#define MYSQLMANAGER_H_  

#include "../Common/CheckStringTools.h"  

#include <mysql.h>  

#include <string>   
#include <iostream>   
#include <vector>  

#include <string.h>  

using namespace std;  

class MySQLManager   
{   
public:   
        /*   
         * Init MySQL   
         * @param hosts:         Host IP address   
         * @param userName:        Login UserName   
         * @param password:        Login Password   
         * @param dbName:        Database Name   
         * @param port:                Host listen port number   
         */   
        MySQLManager(std::string hosts, std::string userName, std::string password, std::string dbName, unsigned int port);   
        ~MySQLManager();   
        void initConnection();   
        /*   
         * Making query from database   
         * @param mysql:        MySQL Object   
         * @param sql:                Running SQL command   
         */   
        bool runSQLCommand(std::string sql);   
        /**   
         * Destroy MySQL object   
         * @param mysql                MySQL object   
         */   
        void destroyConnection();   
        bool getConnectionStatus();   
        vector< vector<string> > getResult();   
protected:   
        void setUserName(std::string userName);   
        void setHosts(std::string hosts);   
        void setPassword(std::string password);   
        void setDBName(std::string dbName);   
        void setPort(unsigned int port);   
private:   
        bool IsConnected;   
        vector< vector<string> > resultList;   
        MYSQL mySQLClient;   
        unsigned int DEFAULTPORT;   
        char * HOSTS;   
        char * USERNAME;   
        char * PASSWORD;   
        char * DBNAME;   
};  

#endif /* MYSQLMANAGER_H_ */

 
#include "MySQLManager.h"  

MySQLManager::MySQLManager(string hosts, string userName, string password, string dbName, unsigned int port)   
{   
        IsConnected = false;   
        this ->setHosts(hosts);            //    设置主机IP地址   
        this ->setUserName(userName);            //    设置登录用户名   
        this ->setPassword(password);            //    设置登录密码   
        this ->setDBName(dbName);            //    设置数据库名   
        this ->setPort(port);            //    设置端口号   
}  

MySQLManager::~MySQLManager()   
{   
        this ->destroyConnection();   
}  

void MySQLManager::setDBName(string dbName)   
{   
        if ( dbName.empty() )   
        {//        用户没有指定数据库名   
                std::cout << "DBName is null! Used default value: mysql" << std::endl;   
                this ->DBNAME = new char[5];   
                strcpy(this ->DBNAME, "mysql");   
        }   
        else   
        {   
                this ->DBNAME = new char[dbName.length()];   
                strcpy(this ->DBNAME, dbName.c_str());   
        }   
}  

void MySQLManager::setHosts(string hosts)   
{   
        if ( hosts.empty() )   
        {//    用户没有指定数据库IP地址   
                std::cout << "Hosts is null! Used default value: localhost" << std::endl;   
                this ->HOSTS = new char[9];   
                strcpy(this ->HOSTS, "localhost");   
        }   
        else   
        {   
                this ->HOSTS = new char[hosts.length()];   
                strcpy(this ->HOSTS, hosts.c_str());   
        }   
}  

void MySQLManager::setPassword(string password)   
{//    用户没有指定密码   
        if ( password.empty() )   
        {   
                std::cout << "Password is null! Used default value: " << std::endl;   
                this ->PASSWORD = new char[1];   
                strcpy(this ->PASSWORD, "");   
        }   
        else   
        {   
                this ->PASSWORD = new char[password.length()];   
                strcpy(this ->PASSWORD, password.c_str());   
        }   
}  

void MySQLManager::setPort(unsigned int port)   
{//    用户没有指定端口号,使用默认端口号   
        if ( port )   
        {   
                std::cout << "Port number is null! Used default value: 0" << std::endl;   
                this ->DEFAULTPORT = 0;   
        }   
        else   
        {   
                this ->DEFAULTPORT = port;   
        }   
}  

void MySQLManager::setUserName(string userName)   
{//    用户没有指定登录用户名   
        if ( userName.empty() )   
        {   
                std::cout << "UserName is null! Used default value: root" << std::endl;   
                this ->USERNAME = new char[4];   
                strcpy(this ->USERNAME, "root");   
        }   
        else   
        {   
                this ->USERNAME = new char[userName.length()];   
                strcpy(this ->USERNAME, userName.c_str());   
        }   
}  

void MySQLManager::initConnection()   
{   
        if ( IsConnected )   
        {//    已经连接到服务器   
                std::cout << "Is connected to server!" <<std::endl;   
                return;   
        }   
        mysql_init(&mySQLClient);//    初始化相关对象   
        if ( !mysql_real_connect( &mySQLClient, HOSTS, USERNAME, PASSWORD, DBNAME, DEFAULTPORT, NULL, 0) )   
        {//    连接到服务器   
                std::cout << "Error connection to database: %s\n" << mysql_error(&mySQLClient) << std::endl;   
        }   
        IsConnected = true;//    修改连接标识   
}  

bool MySQLManager::runSQLCommand(string sql)   
{   
        if ( !IsConnected )   
        {//    没有连接到服务器   
                std::cout << "Not connect to database!" << std::endl;   
                return false;   
        }   
        if ( sql.empty() )   
        {//    SQL语句为空   
                std::cout << "SQL is null!" << std::endl;   
                return false;   
        }  

        MYSQL_RES *res;   
        MYSQL_ROW row;  

        unsigned int i,j = 0;  

        StringTools stringTools;   
        sql = stringTools.filterString(sql);  

        i = mysql_real_query(&mySQLClient,sql.c_str(),(unsigned int)strlen(sql.c_str()));//    执行查询   
        if ( i )   
        {   
                std::cout << "Error query from database: %s\n" << mysql_error(&mySQLClient) << std::endl;   
                return false;   
        }   
        res = mysql_store_result(&mySQLClient);   
        vector<string> objectValue;   
        while( (row = mysql_fetch_row(res)) )   
        {//    遍历结果集   
                objectValue.clear();   
                for ( j = 0 ; j < mysql_num_fields(res) ; j++ )   
                {   
                        objectValue.push_back(row[j]);   
                }   
                this ->resultList.push_back(objectValue);   
        }   
        mysql_free_result(res);         //free result after you get the result  

        return true;   
}  

vector< vector<string> > MySQLManager::getResult()   
{   
        return resultList;   
}  

void MySQLManager::destroyConnection()   
{   
        mysql_close(&mySQLClient);   
        this ->IsConnected = false;   
}  

bool MySQLManager::getConnectionStatus()   
{   
        return IsConnected;   
}

 

分享到:
评论

相关推荐

    mysql5.1中文手册

    在Linux下安装MySQL&lt;br&gt;2.5.在Mac OS X中安装MySQL&lt;br&gt;2.6. 在NetWare中安装MySQL&lt;br&gt;2.7. 在其它类Unix系统中安装MySQL&lt;br&gt;2.8. 使用源码分发版安装MySQL&lt;br&gt;2.8.1. 源码安装概述&lt;br&gt;2.8.2. 典型配置选项&lt;br&gt;2.8.3...

    MySQL访问接口(Linux下c++

    这是我自己设计的在Linux下访问MySQL数据库的类的代码,包括基本的插入和查找

    Linux下实现C++操作Mysql数据库

    想用C++写项目,数据库是必须的,所以这两天学了一下C++操作MySQL数据库的方法。也没有什么教程,就是在网上搜的知识,下面汇总一下。 连接MySQL数据库有两种方法:第一种是使用ADO连接,不过这种只适合Windows...

    c++ mysqlhelper 数据库访问层功能封装

    c++访问mysql数据库的类封装,支持linux和windows两种操作系统,简单实用

    mysql访问类 c++封装,linux平台和windows平台下都可用

    mysql访问类 c++封装,linux平台和windows平台下都可用

    跨平台的c++连接mysql

    支持跨平台,用c++封装成的数据访问层,目前只支持mysql,可将代码加入工程直接编译,快速实现mysql数据库的访问! 注意:在vc下,需要下载mysql的c库,在linux下,也要下载mysql的c库,并设置。 g++ main.cpp -o ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。...

    C++ Qt 基于数据库Mysql学生信息管理系统.zip

    此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如...

    Python访问Mysql数据库

    这些平台包括Linux、Windows、FreeBSD、Macintosh、 Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/ OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、Vx- Works、PlayStation、Sharp Zaurus、Windows CE 甚至...

    Linux+Apache+Nginx+Mysql+PHP完美配置教程

    一、准备工作 1、安装编译工具gcc、gcc-c++ 注意解决依赖关系,推荐使用yum安装,若不能联网可使用安装光盘做为yum源—— 1)编辑yum配置文件: 2)剪切/etc/yum.repos.d/CentOS-Base.repo 3)依次安装gcc、gcc-c++ ...

    基于QT、MySQL开发的酒店管理系统(c++课设).zip

    此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如...

    MySQL 5.1中文手冊

    2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树...

    基于Linux平台,C++编写的分布式系统。服务器端采用了线程池+Libevent的IO模型,并为其实现了简单的负载均衡

    这是一个基于Linux平台,C++编写的分布式系统。服务器端采用了线程池+Libevent的IO模型,并为其实现了简单的负载均衡。服务器端业务层使用了MVC的设计模式。数据存储方面对MySQL数据库C-API进行了C++的类封装。为了...

    C++程序设计实践项目——学生信息管理系统,基于Qt+MySQL.zip

    此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如...

    MySQL 5.1官方简体中文参考手册

    2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/(第 2/24 页)2006-11-02 19:12:13 MySQL 5.1 Reference Manual 2.7. 在...

    MySQL 5.1参考手册

    2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树...

    MySQL 5.1参考手册中文版

    2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发...

    MYSQL C API 访问程序

    1. 以下是研究 mysql 5.0.22 得出的结果,描述并使用标准 c++演示了使用 MySQLC API 函数 简单操作数据库的流程; 例子程序在 VC6(VC7.1) + windows 2000 上调试通过; 例子程序在 red hat linux 9,red fc6 上调试通过 ...

Global site tag (gtag.js) - Google Analytics