qidao123.com技术社区-IT企服评测·应用市场

标题: 【MySQL数据库】C/C++毗连数据库 [打印本页]

作者: 知者何南    时间: 前天 11:29
标题: 【MySQL数据库】C/C++毗连数据库
        MySQL要想在C/C++下使用,就必须要有 MySQL 提供的头文件和相关的库。
        在Ubuntu系统上,使用 apt install mysql-server 安装MySQL服务器后,仅安装了MySQL数据库服务自己,并没有安装MySQL开发所需的库和头文件。因此,在实验用C/C++编写访问MySQL数据库的应用程序时,编译器找不到相应的MySQL头文件(如)和相关的库,导致无法正常编译。
        使用C/C++访问数据库时,需要安装MySQL提供的开发包,这些包包含了进行MySQL开发所需的头文件和库文件。Ubuntu系统下安装的MySQL服务,可以使用以下指令安装MySQL开发库。
   sudo apt install default-libmysqlclient-dev
          注意:MySQL开发库的版本要与MySQL服务器同等,否则某些环境下会出现不兼容问题。  
        在Ubuntu系统下安装好MySQL后,头文件在 /usr/include/mysql 路径下(/usr/include是系统搜索头文件的默认路径),库文件在 /usr/lib/x86_64-linux-gnu/ 路径下(系统链接库时默认的查找路径)。
        下面通过 mysql_get_client_info() 函数,来验证我们的引入是否乐成。
   #include <cstdio>
  #include <mysql/mysql.h>
  int main()
  {
      printf("mysql client Version: %s\n", mysql_get_client_info());
      return 0;
  }
  // 下面指令天生失败,因为没有链接MySQL库
  zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test  
  // 链接MySQL库,乐成天生
  zhu@iv-ydi2mepybkcva4ghjhmx:~/mysql$ g++ test.cc -o test -lmysqlclient  
          C/C++对应MySQL的接口和使用流程请观看此文章:MySQL操纵函数接口。
   MySQL通用接口:
          初始化一个MYSQL毗连的实例对象。
          MYSQL * mysql_init(MYSQL *mysql);    
          毗连MySQL服务器。
          MYSQL *mysql_real_connect (
                MYSQL *mysql,
                const char *host,
                const char *user, 
                const char *passwd, 
                const char *db, 
                unsigned int port,
                const char *unix_socket,
                unsigned long client_flag); 

          用于向 MySQL 服务器发送 SQL 语句并执行它。
          int mysql_query(MYSQL *mysql, const char *stmt_str);
  获取MySQL结果:
          mysql_store_result是从 MySQL 服务器获取查询结果集的一个函数。当执行了一个select 查询或其他会产生结果集的查询(如show)后,可以使用该函数来将整个结果集一次性加载到客户端内存中。
        MYSQL_RES *mysql_store_result(MYSQL *mysql);
        mysql_store_result 获取结果集后,下面就是读取获取结果会合的数据。
        获取结果行数:my_ulonglong mysql_num_rows(MYSQL_RES *res);
        获取结果列数:unsigned int mysql_num_fields(MYSQL_RES *res);
        获取结果会合每个列的属性信息:
                MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
        获取结果会合的数据:MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
       
        阐明:my_ulonglong实在就是int64_t;
                   MYSQL_FIELD是一个布局体,mysql_fetch_fields现实返回的就是布局体数            组,数组的每个元素对应一个列的属性信息;
                  MYSQL_ROW实在就是char**,可以当成一个二维数组来用,每一列对应数组中        的一个元素
  注意:
          1,创建好链接之后,获取英文没有问题,如果获取中文是乱码,那么阐明设置链接的字符集与数据库不匹配。这里需要运用 mysql_set_character_set 修改字符集。
          mysql_set_character_set(myfd, "utf8");    myfd使用utf8字符集,原始默认是latin1
          2,mysql_store_result函数存储结果集时,内部malloc了一片内存空间来存储查询过来的数据,执行完毕后,需要 void mysql_free_result(MYSQL_RES *result) 函数来释放资源。
          代码实例请在此链接下观看:C++代码运用MySQL

        下面来阐明下 show processlist 命令。
        show processlist 是 MySQL 中用于表现当前全部毗连到 MySQL 服务器的毗连(即线程)以及其状态的命令。每个毗连在 MySQL 中都表示为一个线程。该指令提供了查看这些线程详细信息的方法。输出字段阐明如下:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4