mysql 的c++程序的编译与连接

这个问题几乎困扰了我一天,终于得到解决。

      第一首先下载mysql-server、mysql-client、mysql-connector,把mysql-connector解压之后,把头文件考到/usr/include下面,把库文件拷到/usr/lib下面。

    然后编写一个C++程序,我的例子如下:

     #ifndef __MYSQL_JOB_H

#define __MYSQL_JOB_H

//#ifdef _cplusplus

//extern "C"{

//#endif

//#include "/usr/include/mysql/mysql.h"

//#include "/usr/include/mysql/errmsg.h"

//#include <mysql/my_pthread.h>

#include <mysql/mysql.h>

#include <mysql/errmsg.h>

#include <iostream>

#include <string>

using namespace std;

class MysqlJob{

  public:

    MysqlJob(char* usr, char* pwd, char* host){

      strUsr = usr;

      strPassword = pwd;

      strHost = host;

      mysql_init(&mySQL);

      mysqlRet=NULL;

      isConnected = false;

    }

    ~MysqlJob(){

     CloseMySql();

    }

    void inline Sql_SetUsrName(char* name){

          strUsr = name;

    }

    void inline Sql_SetDatabaseName(char* DatabaseName){

         strDatabaseName = DatabaseName;

    }

    void inline Sql_SetPassword(char* pwd){

         strPassword = pwd;

    }void inline Sql_SetHost(char* host){

         strHost = host;

    }

    int Sql_Connect();

    void CloseMySql();

    int inline Sql_isConnected()

      {

         return isConnected;

    }

  protected:

  private:

   MYSQL  mySQL;

   MYSQL_RES *mysqlRet;

   MYSQL_ROW mysqlRow;

   string strUsr;

   string strDatabaseName;

   string strPassword;

   string strHost;

   bool isConnected;

};

//#ifdef _cplusplus

//}

//#endif

#endif

 

 

#include "mysql_job.h"

void MysqlJob::CloseMySql()

{

  mysql_close(&mySQL);

}

int MysqlJob::Sql_Connect()

{

  if(mysql_real_connect(&mySQL, strHost.c_str(), strUsr.c_str(), strPassword.c_str(),strDatabaseName.c_str(), 0, NULL, 0)==NULL){

  switch(mysql_errno(&mySQL)){

    case CR_UNKNOWN_HOST:

     cout<<mysql_error(&mySQL);

     break;

    case CR_VERSION_ERROR:

     cout<<mysql_error(&mySQL);

     break;

    case CR_OUT_OF_MEMORY:

     cout<<mysql_error(&mySQL);

     break;

    case CR_IPSOCK_ERROR:

     cout<<mysql_error(&mySQL);

     break;

    case CR_SOCKET_CREATE_ERROR:

     cout<<mysql_error(&mySQL);

     break;

    default:

     cout<<mysql_error(&mySQL);

     break;

  }

  return -1;

 }

  isConnected = true;

  return 1;

}

 

#define TEST

#ifdef TEST

int main()

{

 MysqlJob jobcon("root", "13349", "localhost");

 if( jobcon.Sql_Connect() < 0){

   cout<<"connect error!/n";

   return 1;

  }else{

   cout<<"connect successed!/n";

  }

 jobcon.CloseMySql();

}

#endif

 

 

 

然后编译: g++ mysql_job.h mysql_job.cpp  -o mysql_job -lmysql

因为程序头文件和库的路径都是/usr/include 和/usr/lib下面,所以我们不需要指定头文件和库文件的路径,编译之后,我们可以执行一下,发现有一个错误:Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)connect error!

原因是我在装mysql的时候,从/usr/share/mysql拷贝了一个.cnf文件到/etc/my.cnf了,指定了数据库存储路径,从而指定了sock的路径

:/home/data/mysql/mysql.sock,因此需要在mysql_real_connect函数里面需要指定unix_sock一项为“/home/data/mysql/mysql.sock”,否则如果指定为NULL的话则默认为“/tmp/mysql.sock”了。至此,成功连接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将C++程序MySQL连接,需要进行以下步骤: 1. 安装MySQL Connector/C++:可以从MySQL官网下载安装包,也可以使用包管理器进行安装。 2. 包含必要的头文件:在C++程序中包含MySQL Connector/C++的头文件,例如: ``` #include <mysqlx/xdevapi.h> ``` 3. 创建一个Session对象:Session对象是连接MySQL数据库的入口点,可以使用Session对象执行SQL查询和操作。 ``` mysqlx::Session session("localhost", 3306, "username", "password"); ``` 4. 执行SQL查询:使用Session对象执行SQL查询,例如: ``` mysqlx::Schema db = session.getSchema("mydb"); mysqlx::Table tab = db.getTable("mytable"); mysqlx::Result res = tab.select("id", "name").where("id > :id").bind("id", 10).execute(); ``` 上面的代码中,首先获取了名为“mydb”的数据库对象,然后获取了名为“mytable”的数据表对象,最后执行了一个SELECT查询,查询id大于10的记录,并返回查询结果。 5. 处理查询结果:使用Result对象处理查询结果,例如: ``` while (res.next()) { int id = res.get(1); std::string name = res.get(2); std::cout << "id: " << id << ", name: " << name << std::endl; } ``` 上面的代码中,使用while循环遍历查询结果集,并获取每个记录的id和name字段值。 需要注意的是,连接MySQL数据库需要提供正确的用户名和密码,同时还需要确保MySQL服务已经启动。另外,还需要在编译时链接MySQL Connector/C++库,例如: ``` g++ -o myapp myapp.cpp -lmysqlcppconn8 ``` 其中,myapp.cpp是你的C++程序文件名,-lmysqlcppconn8表示链接MySQL Connector/C++库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值