首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Linux上C++访问MySQL<一>

2012-12-22 
Linux下C++访问MySQL一/* 配置开发环境首先需要编译、安装MySQL,安装完成后,将MySQL目录中的lib目录添加

Linux下C++访问MySQL<一>
/*
配置开发环境
首先需要编译、安装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;???
}

?

热点排行
Bad Request.