`
suiyuan0808
  • 浏览: 154439 次
  • 性别: 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...

    linux(centos) 下C++连接mysql数据库

    在Linux(CentOS)系统中,使用C++连接MySQL数据库是一项常见的任务,特别是在开发服务器端应用程序时。这里我们将深入探讨如何实现这一目标,以及在这个过程中可能遇到的关键知识点。 首先,你需要确保你的系统...

    Linux下使用C++编写的并发服务器,redis缓存和MySQL数据库,GoogleTest单元测试和webbench压力测试

    spark一个Linux下使用C++学习编写的并发服务器,使用redis作为缓存和MySQL作为数据库,并利用GoogleTest编写单元测试和webbench进行压力测试。.zipspark一个Linux下使用C++学习编写的并发服务器,使用redis作为缓存...

    MySQL访问接口(Linux下c++

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

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

    总的来说,`c++ mysqlhelper 数据库访问层功能封装`是一个高效、易于使用的C++类库,它为开发人员提供了一种简便的方式来与MySQL数据库进行交互,无论是在Linux还是Windows环境中。通过封装底层的MySQL C API,它...

    Mysql 连接(linux ,c++,java)

    安装此库后,可以使用`#include &lt;mysql_driver.h&gt;`和`#include &lt;mysql_connection.h&gt;`头文件来访问必要的API。连接过程包括以下步骤: 1. 初始化连接池或单个连接对象。 2. 创建一个`sql::mysql::MySQL_Driver`实例...

    c++ 连接mysql 跨平台

    当我们谈论"C++连接MySQL跨平台"时,我们关注的是如何在不同的操作系统(如Windows、Linux、macOS等)上使用C++编写程序来与MySQL数据库进行交互。这涉及到C++的MySQL客户端库(通常称为libmysqlclient)的使用,它...

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

    MySQL访问类C++封装是一种在C++编程语言中与MySQL数据库进行交互的方式,它使得开发者能够在C++程序中轻松地执行SQL查询、管理数据库连接、处理结果集等操作。这样的封装通常包括对MySQL C API的包装,以提供更面向...

    mysql c++ 封装类

    MySQL C++ 封装类是将MySQL数据库的接口与C++编程语言相结合,提供一个更加友好、方便的接口供开发者使用。在Windows环境下,这样的封装类通常会编译成动态链接库(DLL),使得其他C++项目可以方便地调用其中的函数...

    Linux下访问MySQL

    在Linux环境下,访问MySQL数据库是开发和管理数据库的重要步骤。以下是一些关于如何在Linux上安装、配置、连接以及操作MySQL的关键知识点: 1. **安装MySQL**: - 首先,你需要挂载MySQL的安装光盘或者下载相应的...

    跨平台的c++连接mysql

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

    c++封装mysql接口

    将C++与MySQL结合,可以创建高效的数据访问接口,便于应用程序与数据库之间的交互。本篇文章将深入探讨如何在C++中封装MySQL接口,并通过一个名为"test"的简单调用示例进行解释。 首先,我们需要了解C++中的面向...

    Mysql标准c++封装

    MySQL标准C++封装是将MySQL数据库的访问功能与C++编程语言相结合的一种技术,使得开发者可以使用C++的语法和特性来操作MySQL数据库。在Ubuntu操作系统下,这种封装经过了测试,确保了其在Linux环境中的兼容性和稳定...

    Linux下的mysql数据库编程

    在Linux环境下进行MySQL数据库编程是一项基础且至关重要的技能,尤其对于系统管理员和开发人员来说。以下将详细探讨这个主题,包括Linux操作系统、MySQL数据库的基本概念、安装与配置、数据库设计、SQL语言、以及...

    poco c++ linux 可编译使用

    这将在当前目录下创建一个`build`子目录,并生成适合你的Linux发行版的Makefile。然后,你可以使用`make`命令来编译Poco: ```bash make -j4 ``` 这里的`-j4`表示使用4个线程并行编译,你可以根据你的CPU核心数...

    mysql.rar_MYSQL_mysql c++_mysql sdk

    MySQL是一款广泛使用的开源关系型数据库管理系统,其C++ SDK(软件开发工具包)为开发者提供了在C++应用程序中与MySQL数据库交互的能力。本压缩包"mysql.rar"包含了关于MYSQL、mysql_c++以及mysql_sdk的相关资源,...

    Linux下的MySQL数据库编程].赵廷涛等.扫描版

    在Linux上运行MySQL数据库可以充分利用其强大的命令行工具,如SSH,用于远程访问和管理数据库服务器。此外,Linux的权限管理系统和防火墙设置为数据库安全提供了坚实保障。 MySQL数据库是很多Web应用和大数据处理的...

    Linux下mysql server &client;

    在Linux环境中,MySQL是一个广泛应用的关系型数据库管理系统,它在服务器端提供数据存储、管理与查询服务,而客户端则用于连接并操作这些服务器。本资源包含Linux下的MySQL Server、Client及Devel组件,使得用户能够...

    linux下mysql5.7.11源码安装

    ### Linux 下 MySQL 5.7.11 源码安装详细步骤与解析 #### 一、环境准备 1. **检查已安装的 MySQL 版本**:在开始之前,确保环境中没有已安装的 MySQL 服务。使用 `rpm -qa | grep mysql` 命令查看是否有 MySQL 的...

Global site tag (gtag.js) - Google Analytics