zoukankan      html  css  js  c++  java
  • C/C++使用MySQL

      一直找不到关于C/C++连接Mysql数据库的详细api书籍和网站,刷了下网页,找到一篇Linux 下C/C++连接数据库的博客,留着以后自己用

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

      1 不多说了,直接上代码,注释都很详细。
      2 /*    
      3 * MySQLManager.h    
      4 *    
      5 *    Created on: Feb 18, 2009    
      6 *            Author: Steven Wee    
      7 */    
      8 
      9 #ifndef MYSQLMANAGER_H_    
     10 #define MYSQLMANAGER_H_    
     11 
     12 #include "../Common/CheckStringTools.h"    
     13 
     14 #include < mysql.h>    
     15 
     16 #include < string>    
     17 #include < iostream>    
     18 #include < vector>    
     19 
     20 #include < string.h>    
     21 
     22 using namespace std;    
     23 
     24 class MySQLManager    
     25 {    
     26 public:    
     27         /*    
     28          * Init MySQL    
     29          * @param hosts:         Host IP address    
     30 
     31          * @param userName:        Login UserName    
     32          * @param password:        Login Password    
     33          * @param dbName:        Database Name    
     34          * @param port:                Host listen port number    
     35          */    
     36         MySQLManager(std::string hosts, std::string userName, std::string password, std::string dbName, unsigned int port);    
     37         ~MySQLManager();    
     38         void initConnection();    
     39         /*    
     40          * Making query from database    
     41          * @param mysql:        MySQL Object    
     42          * @param sql:                Running SQL command    
     43          */    
     44         bool runSQLCommand(std::string sql);    
     45         /**    
     46          * Destroy MySQL object    
     47          * @param mysql                MySQL object    
     48          */    
     49         void destroyConnection();    
     50         bool getConnectionStatus();    
     51         vector<  vector< string> > getResult();    
     52 protected:    
     53         void setUserName(std::string userName);    
     54         void setHosts(std::string hosts);    
     55         void setPassword(std::string password);    
     56         void setDBName(std::string dbName);    
     57         void setPort(unsigned int port);    
     58 private:    
     59         bool IsConnected;    
     60         vector<  vector< string> > resultList;    
     61         MYSQL mySQLClient;    
     62         unsigned int DEFAULTPORT;    
     63         char * HOSTS;    
     64         char * USERNAME;    
     65         char * PASSWORD;    
     66         char * DBNAME;    
     67 };    
     68 
     69 #endif /* MYSQLMANAGER_H_ */ 
     70 
     71 /*    
     72 * MySQLManager.cpp    
     73 *    
     74 *    Created on: Feb 18, 2009    
     75 *            Author: Steven Wee    
     76 */    
     77 #include "MySQLManager.h"    
     78 
     79 MySQLManager::MySQLManager(string hosts, string userName, string password, string dbName, unsigned int port)    
     80 
     81 {    
     82         IsConnected = false;    
     83         this ->setHosts(hosts);            //    设置主机IP地址    
     84         this ->setUserName(userName);            //    设置登录用户名    
     85         this ->setPassword(password);            //    设置登录密码    
     86         this ->setDBName(dbName);            //    设置数据库名    
     87         this ->setPort(port);            //    设置端口号    
     88 }    
     89 
     90 MySQLManager::~MySQLManager()    
     91 {    
     92         this ->destroyConnection();    
     93 }    
     94 
     95 void MySQLManager::setDBName(string dbName)    
     96 {    
     97         if ( dbName.empty() )    
     98         {//        用户没有指定数据库名    
     99                 std::cout < <  "DBName is null! Used default value: mysql" < <  std::endl;    
    100                 this ->DBNAME = new char[5];    
    101                 strcpy(this ->DBNAME, "mysql");    
    102         }    
    103         else    
    104         {    
    105                 this ->DBNAME = new char[dbName.length()];    
    106                 strcpy(this ->DBNAME, dbName.c_str());    
    107         }    
    108 }    
    109 
    110 void MySQLManager::setHosts(string hosts)    
    111 {    
    112         if ( hosts.empty() )    
    113         {//    用户没有指定数据库IP地址    
    114                 std::cout < <  "Hosts is null! Used default value: localhost" < <  std::endl;    
    115                 this ->HOSTS = new char[9];    
    116                 strcpy(this ->HOSTS, "localhost");    
    117         }    
    118         else    
    119         {    
    120                 this ->HOSTS = new char[hosts.length()];    
    121                 strcpy(this ->HOSTS, hosts.c_str());    
    122         }    
    123 }    
    124 
    125 void MySQLManager::setPassword(string password)    
    126 {//    用户没有指定密码    
    127         if ( password.empty() )    
    128         {    
    129 
    130                 std::cout < <  "Password is null! Used default value: " < <  std::endl;    
    131                 this ->PASSWORD = new char[1];    
    132                 strcpy(this ->PASSWORD, "");    
    133         }    
    134         else    
    135         {    
    136                 this ->PASSWORD = new char[password.length()];    
    137                 strcpy(this ->PASSWORD, password.c_str());    
    138         }    
    139 }    
    140 
    141 void MySQLManager::setPort(unsigned int port)    
    142 {//    用户没有指定端口号,使用默认端口号    
    143         if ( port )    
    144         {    
    145                 std::cout < <  "Port number is null! Used default value: 0" < <  std::endl;    
    146                 this ->DEFAULTPORT = 0;    
    147         }    
    148         else    
    149         {    
    150                 this ->DEFAULTPORT = port;    
    151         }    
    152 }    
    153 
    154 void MySQLManager::setUserName(string userName)    
    155 {//    用户没有指定登录用户名    
    156         if ( userName.empty() )    
    157         {    
    158                 std::cout < <  "UserName is null! Used default value: root" < <  std::endl;    
    159                 this ->USERNAME = new char[4];    
    160                 strcpy(this ->USERNAME, "root");    
    161         }    
    162         else    
    163         {    
    164                 this ->USERNAME = new char[userName.length()];    
    165                 strcpy(this ->USERNAME, userName.c_str());    
    166         }    
    167 }    
    168 
    169 void MySQLManager::initConnection()    
    170 {    
    171         if ( IsConnected )    
    172         {//    已经连接到服务器    
    173                 std::cout < <  "Is connected to server!" < < std::endl;    
    174                 return;    
    175         }    
    176         mysql_init(&mySQLClient);//    初始化相关对象    
    177         if ( !mysql_real_connect( &mySQLClient, HOSTS, USERNAME, PASSWORD, DBNAME, DEFAULTPORT, NULL, 0) )    
    178 
    179         {//    连接到服务器    
    180                 std::cout < <  "Error connection to database: %s
    " < <  mysql_error(&mySQLClient) < <  std::endl;    
    181         }    
    182         IsConnected = true;//    修改连接标识    
    183 }    
    184 
    185 bool MySQLManager::runSQLCommand(string sql)    
    186 {    
    187         if ( !IsConnected )    
    188         {//    没有连接到服务器    
    189                 std::cout < <  "Not connect to database!" < <  std::endl;    
    190                 return false;    
    191         }    
    192         if ( sql.empty() )    
    193         {//    SQL语句为空    
    194                 std::cout < <  "SQL is null!" < <  std::endl;    
    195                 return false;    
    196         }    
    197 
    198         MYSQL_RES *res;    
    199         MYSQL_ROW row;    
    200 
    201         unsigned int i,j = 0;    
    202 
    203         StringTools stringTools;    
    204         sql = stringTools.filterString(sql);    
    205 
    206         i = mysql_real_query(&mySQLClient,sql.c_str(),(unsigned int)strlen(sql.c_str()));//    执行查询    
    207         if ( i )    
    208         {    
    209                 std::cout < <  "Error query from database: %s
    " < <  mysql_error(&mySQLClient) < <  std::endl;    
    210                 return false;    
    211         }    
    212         res = mysql_store_result(&mySQLClient);    
    213         vector< string> objectValue;    
    214         while( (row = mysql_fetch_row(res)) )    
    215         {//    遍历结果集    
    216                 objectValue.clear();    
    217                 for ( j = 0 ; j <  mysql_num_fields(res) ; j   )    
    218                 {    
    219                         objectValue.push_back(row[j]);    
    220                 }    
    221                 this ->resultList.push_back(objectValue);    
    222         }    
    223         mysql_free_result(res);         //free result after you get the result    
    224 
    225 
    226 
    227         return true;    
    228 }    
    229 
    230 vector<  vector< string> > MySQLManager::getResult()    
    231 {    
    232         return resultList;    
    233 }    
    234 
    235 void MySQLManager::destroyConnection()    
    236 {    
    237         mysql_close(&mySQLClient);    
    238         this ->IsConnected = false;    
    239 }    
    240 
    241 bool MySQLManager::getConnectionStatus()    
    242 {    
    243         return IsConnected;    
    244 } 

    来自:http://club.topsage.com/forum.php?mod=viewthread&tid=2129419

  • 相关阅读:
    Jessica's Reading Problem POJ
    FatMouse and Cheese HDU
    How many ways HDU
    Humble Numbers HDU
    Doing Homework again
    Stacks of Flapjacks UVA
    Party Games UVA
    24. 两两交换链表中的节点
    面试题 03.04. 化栈为队
    999. 可以被一步捕获的棋子数
  • 原文地址:https://www.cnblogs.com/houjun/p/4873099.html
Copyright © 2011-2022 走看看