/*
配置开发环境
首先需要编译、安装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;
}
分享到:
相关推荐
在Linux下安装MySQL<br>2.5.在Mac OS X中安装MySQL<br>2.6. 在NetWare中安装MySQL<br>2.7. 在其它类Unix系统中安装MySQL<br>2.8. 使用源码分发版安装MySQL<br>2.8.1. 源码安装概述<br>2.8.2. 典型配置选项<br>2.8.3...
在Linux(CentOS)系统中,使用C++连接MySQL数据库是一项常见的任务,特别是在开发服务器端应用程序时。这里我们将深入探讨如何实现这一目标,以及在这个过程中可能遇到的关键知识点。 首先,你需要确保你的系统...
spark一个Linux下使用C++学习编写的并发服务器,使用redis作为缓存和MySQL作为数据库,并利用GoogleTest编写单元测试和webbench进行压力测试。.zipspark一个Linux下使用C++学习编写的并发服务器,使用redis作为缓存...
这是我自己设计的在Linux下访问MySQL数据库的类的代码,包括基本的插入和查找
总的来说,`c++ mysqlhelper 数据库访问层功能封装`是一个高效、易于使用的C++类库,它为开发人员提供了一种简便的方式来与MySQL数据库进行交互,无论是在Linux还是Windows环境中。通过封装底层的MySQL C API,它...
安装此库后,可以使用`#include <mysql_driver.h>`和`#include <mysql_connection.h>`头文件来访问必要的API。连接过程包括以下步骤: 1. 初始化连接池或单个连接对象。 2. 创建一个`sql::mysql::MySQL_Driver`实例...
当我们谈论"C++连接MySQL跨平台"时,我们关注的是如何在不同的操作系统(如Windows、Linux、macOS等)上使用C++编写程序来与MySQL数据库进行交互。这涉及到C++的MySQL客户端库(通常称为libmysqlclient)的使用,它...
MySQL访问类C++封装是一种在C++编程语言中与MySQL数据库进行交互的方式,它使得开发者能够在C++程序中轻松地执行SQL查询、管理数据库连接、处理结果集等操作。这样的封装通常包括对MySQL C API的包装,以提供更面向...
MySQL C++ 封装类是将MySQL数据库的接口与C++编程语言相结合,提供一个更加友好、方便的接口供开发者使用。在Windows环境下,这样的封装类通常会编译成动态链接库(DLL),使得其他C++项目可以方便地调用其中的函数...
在Linux环境下,访问MySQL数据库是开发和管理数据库的重要步骤。以下是一些关于如何在Linux上安装、配置、连接以及操作MySQL的关键知识点: 1. **安装MySQL**: - 首先,你需要挂载MySQL的安装光盘或者下载相应的...
支持跨平台,用c++封装成的数据访问层,目前只支持mysql,可将代码加入工程直接编译,快速实现mysql数据库的访问! 注意:在vc下,需要下载mysql的c库,在linux下,也要下载mysql的c库,并设置。 g++ main.cpp -o ...
将C++与MySQL结合,可以创建高效的数据访问接口,便于应用程序与数据库之间的交互。本篇文章将深入探讨如何在C++中封装MySQL接口,并通过一个名为"test"的简单调用示例进行解释。 首先,我们需要了解C++中的面向...
MySQL标准C++封装是将MySQL数据库的访问功能与C++编程语言相结合的一种技术,使得开发者可以使用C++的语法和特性来操作MySQL数据库。在Ubuntu操作系统下,这种封装经过了测试,确保了其在Linux环境中的兼容性和稳定...
在Linux环境下进行MySQL数据库编程是一项基础且至关重要的技能,尤其对于系统管理员和开发人员来说。以下将详细探讨这个主题,包括Linux操作系统、MySQL数据库的基本概念、安装与配置、数据库设计、SQL语言、以及...
这将在当前目录下创建一个`build`子目录,并生成适合你的Linux发行版的Makefile。然后,你可以使用`make`命令来编译Poco: ```bash make -j4 ``` 这里的`-j4`表示使用4个线程并行编译,你可以根据你的CPU核心数...
MySQL是一款广泛使用的开源关系型数据库管理系统,其C++ SDK(软件开发工具包)为开发者提供了在C++应用程序中与MySQL数据库交互的能力。本压缩包"mysql.rar"包含了关于MYSQL、mysql_c++以及mysql_sdk的相关资源,...
在Linux上运行MySQL数据库可以充分利用其强大的命令行工具,如SSH,用于远程访问和管理数据库服务器。此外,Linux的权限管理系统和防火墙设置为数据库安全提供了坚实保障。 MySQL数据库是很多Web应用和大数据处理的...
在Linux环境中,MySQL是一个广泛应用的关系型数据库管理系统,它在服务器端提供数据存储、管理与查询服务,而客户端则用于连接并操作这些服务器。本资源包含Linux下的MySQL Server、Client及Devel组件,使得用户能够...
### Linux 下 MySQL 5.7.11 源码安装详细步骤与解析 #### 一、环境准备 1. **检查已安装的 MySQL 版本**:在开始之前,确保环境中没有已安装的 MySQL 服务。使用 `rpm -qa | grep mysql` 命令查看是否有 MySQL 的...