「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL

这篇具有很好参考价值的文章主要介绍了「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、准备mysql库:Connector/C

1. 查看是否有mysql相关的库和头文件

2. 安装devel(开发库)

3.到官网下载开发包,并上传到Linux

3.0 须知

3.1 到官网下载开发包

3.2 上传安装包至Linux

二、mysql库:Connector/C 的使用

1. 创建并初始化mysql对象

2. 销毁mysql对象

3. 链接数据库

4. 设置编码格式

5. 下发SQL语句给数据库

6. 获取执行sql语句的结果

6.1 从myql对象里读取结果

6.2 从MYSQL_RES对象里获取行数

6.3 从MYSQL_RES对象里获取列数

6.4 从MYSQL_RES对象里获取列名

6.5 从MYSQL_RES对象里一行一行的读取结果

拓展】Connector/C库还支持事务等常用操作 

练习】使用Connector/C库编写一个简易的mysql客户端


一、准备mysql库:Connector/C

        要使用C/C++连接mysql,需要devel(开发库),一般来说在Linux上下好了MySQL这个库也会顺带给我们下载好。如果没有也可以单独安装。

1. 查看是否有mysql相关的库和头文件

  • 使用命令 rpm -qa | grep mysql 查看是否有mysql相关的库,重点是devel(开发库):

        「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

  • 使用命令 ls /lib64/mysql/ -al 查看库的链接情况

        「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

  • 使用命令 ls /usr/include/mysql/ 查看mysql相关的头文件:

        「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

2. 安装devel(开发库)

如果只是缺少devel(开发库)可尝试用yum安装

yum install -y mysql-community-devel

安装好devel(开发库)后:

我们只需要用 #include <mysql/mysql.h>  就可引入mysql库。

编译时加上:-L/lib64/mysql -lmysqlclient 帮助编译器找到头文件和库即可。

3.到官网下载开发包,并上传到Linux

3.0 须知

        如果无法安装devel(开发库),还可以到官网下载开发包,再上传到Linux,但是不推荐怎么做,因为可能会因为开发包和自己MySQL的版本不同而出现各种奇奇怪怪的问题:如ssl证书问题,套接字问题……

        所以能不这样做尽量不要这样做,要用这个方法还不如看博主文章重新安装MySQL。

按照里面的方法一定能安装好mysql和devel(开发库)。


3.1 到官网下载开发包

a. 官网下载Download Archives

「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

 b. 选择MySQL Connector/C

「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

c. 选择系统和版本。下图为Linux版的下载。

「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

3.2 上传安装包至Linux

a. 上传安装包: rz -y

「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

b. 解压: tar -xzvf mysql-connector-c-6.1.11-linux-glibc2.12-x86_64.tar.gz

「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

c. 在要使用库的目录下建立头文件的软链接和库的软链接

「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL,MySQL,mysql,数据库

d. 修改配置文件让g++编译时能找到动态库

如果提示找不到动态库libmysqlclient,我们还需要修改配置文件(以下命令建议在root用户下执行):

1. 添加配置文件:vim /etc/ld.so.conf.d/lib_search.conf

2. 往里面加入 mysql库中lib目录的路径:

        路径获取方式:cd进入刚才解压好的文件中,使用pwd lib查看lib目录的路径

3. 然后运行指令 sudo ldconfig 更新配置文件

e. 写代码时要引入头文件 "软链接地址/mysql.h"

编译时要加上 -I./头文件的软链接地址/include -L./库的软链接地址 -lmysqlclient 帮助编译器找到头文件和库。


二、mysql库:Connector/C 的使用

1. 创建并初始化mysql对象

函数:
    mysql_init()
示例:
    MYSQL *mysql = mysql_init(NULL);

2. 销毁mysql对象

函数:
    mysql_close(要销毁的对象);
示例:
    mysql_close(mysql);

3. 链接数据库

初始化完毕之后,必须先链接数据库,在进行后续操作。(mysql网络部分是基于TCP/IP的)

函数:
    mysql_real_connect(mysql, host, user, passwd, db, port, unix_socket, clientflag)
    //使用指定用户登录指定数据库,该用户必须有远程访问权限

参数说明:
    mysql  :  mysql对象
    host   :  要连接的主机
    user   :  mysql用户,该用户必须有远程访问权限
    passwd :  用户密码
    db     :  要连接的数据库
    port   :  端口号
    unix_socket :  套接字,nullptr为默认由系统选择
    clientflag  :  客户端标志,默认为0

示例:
{
    std::string host   = "localhost";
    std::string user   = "test"; //该用户必须有远程访问权限
    std::string passwd = "123";
    std::string db     = "test_table";
    unsigned int port   = 3306;
    if(mysql_real_connect(mysql, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(), port, nullptr, 0) == nullptr)
    {
        fprintf(stderr, "%s\n", mysql_error(mysql)); //显示连接时遇到的错误
        std::cerr << "Failed to connect to MySQL user!\n";
        exit(-2);
    }
    std::cout << "Successfully to connect to MySQL user!\n";
}

4. 设置编码格式

//建立好链接之后,获取英文没有问题,但如果获取中文就是乱码。
//设置链接的默认字符集为utf8,原始默认是latin1(拉丁文)
mysql_set_character_set(myfd, "utf8");

5. 下发SQL语句给数据库

函数:
    int mysql_query(MYSQL *mysql, const char *sql);
    //下发SQL语句,让上面指定用户执行SQL语句对上面指定的数据库进行操作
参数:
    mysql : mysql对象
      sql : sql语句
返回值:
    成功返回0,失败返回1。
示例:
    std::string sql = "select * from test_table";
    int n = mysql_query(mysql, sql.c_str());

6. 获取执行sql语句的结果

sql执行完以后,如果是查询语句,我们还要读取查询出来的结果,该结果以二进制的形式被保存在mysql对象里,所以我们还需要一个函数来读取保存在mysql对象里的结果。

6.1 从myql对象里读取结果

函数:
    MYSQL_RES *mysql_store_result(MYSQL *mysql);

参数:
    mysql对象。

返回值:
    MYSQL_RES对象,一个专门用来保存查询结果的对象,它有各种获取结果的方法。

说明:
    对于该函数,我们需要自己创建一个MYSQL_RES指针来接收返回的MYSQL_RES对象,因为
MYSQL_RES对象malloc了一片内存空间来存储查询过来的数据,所以我们一定要记得 free(),
不然会造成内存泄漏。如果用的是较新版本的devel(开发库),可能创建出来的MYSQL_RES对象
会自动释放,free会报空指针异常,就不用free。执行完mysql_store_result()以后,其实
数据都已经在MYSQL_RES对象中了,下面的api基本就是读取 MYSQL_RES对象中的数据。

示例:
    MYSQL_RES* res = mysql_store_result(mysql);
    if(res == nullptr) exit(0);
    free(res); //如果报错证明当前版本的开发库中的mysql对象会自动释放,删除此句即可。

6.2 从MYSQL_RES对象里获取行数

函数:
    my_ulonglong mysql_num_rows(MYSQL_RES *res);

参数:
    MYSQL_RES对象。

返回值:
    一个长整型。

示例:
    int rows = mysql_num_rows(res);
    std::cout << "表中有" << rows << "行。\n";

6.3 从MYSQL_RES对象里获取列数

函数:
    unsigned int mysql_num_fields(MYSQL_RES *res);
参数:
    MYSQL_RES对象。
返回值:
    一个无符号整型。
示例:
    int cols = mysql_num_fields(res);
    std::cout << "表中有" << cols << "列。\n";

6.4 从MYSQL_RES对象里获取列名

函数:
    MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

参数:
    MYSQL_RES对象。

返回值:
    MYSQL_FIELD:结构体数组指针,指向结构体数组,结构体的name成员为字符串通过用来保存列名。

示例:
    int cols = mysql_num_fields(res); //获取列数
    MYSQL_FIELD *col_name = mysql_fetch_fields(res);
    for(int i = 0; i < cols; i++)
    {
        std::cout << col_name[i].name << "  |  ";
    }

6.5 从MYSQL_RES对象里一行一行的读取结果

函数:
    MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);

参数:
    MYSQL_RES对象。

返回值:
    MYSQL_ROW对象,相当于一个二维数组,用来保存表中内容

示例:
    MYSQL_ROW line; //创建MYSQL_ROW对象,用来保存表中内容
    for(int i = 0; i < rows; i++) //行数rows通过mysql_num_rows()获取。
    {
        line = mysql_fetch_row(res);
            
        for(int j = 0; j < cols; j++) //列数cols通过mysql_num_fields()获取。
        {
            std::cout << line[j]<< " "; //打印第i行的第j列内容。
        }
        std::cout << std::endl;
    }


拓展】Connector/C库还支持事务等常用操作 

my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode);
my_bool STDCALL mysql_commit(MYSQL * mysql);
my_bool STDCALL mysql_rollback(MYSQL * mysql);

练习】使用Connector/C库编写一个简易的mysql客户端

源代码:MySQL · yblhlk/Linux课程 - 码云 - 开源中国 (gitee.com)


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。文章来源地址https://www.toymoban.com/news/detail-679404.html

到了这里,关于「MySQL-04」Linux环境下使用C/C++连接并操纵MySQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux环境安装mysql数据库

    一:查看是否自带mariadb数据库 命令:rpm -qa | grep mariadb 如果自带数据库则卸载掉重新安装 命令:yum remove mariadb-connector-c-3.1.11-2.el8_3.x86_64 二:下载mysql 命令:wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 注意:如果出现No such file or directory,运行命令:su root 三

    2024年02月15日
    浏览(57)
  • 【MySQL】如何使用Unix Sockets 协议连接MySQL数据库

    MySQL入门02:关于MySQL连接的ABC 【MySQL】如何使用Named Pipe协议(Windows)连接MySQL数据库 【MySQL】如何使用Shared-memory协议(Windows)连接MySQL数据库 【MySQL】如何使用Unix Sockets 协议连接MySQL数据库 【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术

    2024年02月11日
    浏览(47)
  • 【MySQL】使用DBeaver数据库管理工具进行MySQL数据库连接

    一、数据库连接信息填写 1、服务器地址:填写服务器部署的地址,以及端口号 2、数据库:sys 3、用户名:root 4、密码:服务器上面设置的具体密码 以上信息填写错误的报错提示 :Access denied for user ‘XXX’@’%’ to database ‘10.42.67.22’ 二、数据库说明 1、数据库连接时选择的

    2024年02月09日
    浏览(93)
  • 使用python连接mysql数据库

    第一章 Python 机器学习入门之连接mysql数据库 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 在控制台输入如下: 代码如下(示例): 演示

    2024年02月16日
    浏览(69)
  • 【MySQL】使用C++连接数据库

    创建数据库并选中 创建表并描述表结构 增加删除修改均可正常执行,查询较为复杂,整体代码中有案例 如果查询则需要把查询数据保存到结果集,通过mysql所提供的函数 得到行和列,遍历得到结果。 初始化mysql并返回句柄(默认传入nullptr即可) 如: MYSQL *mfp = mysql_init(nul

    2024年02月13日
    浏览(53)
  • Linux服务器装mysql数据库并且连接数据库(详细教程)(阿里云)

    废话不多说,直接上教程。 1.首先执行如下命令,更新YUM源。 2.执行如下命令,安装MySQL。 3.执行如下命令,查看MySQL版本号。 4.返回结果如下,表示您已成功安装MySQL。 5.执行如下命令,启动MySQL服务。 6. 执行如下命令,设置MySQL服务开机自启动。 7.配置MySQL的root用户密码。

    2024年02月06日
    浏览(64)
  • 使用eclipse连接mysql数据库步骤

    1.导入连接MySQL数据库驱动包(例如mysql-connector-java-5.1.7-bin.jar),并测试。 步骤: 1)在eclipse里面点击右上角的图标,如下图所示。 2)选中Database Connections右键,点new。 3)选择MySQL,点击next。 4)如图所示: 2.引用MySQL驱动包jar 在项目右键一个文件夹lib,把驱动包复制进去,

    2024年02月11日
    浏览(68)
  • 使用C#连接MySQL数据库(详解)

    ✨前言✨ 本片文章,主要在于C#连接MySQL数据库,由于这之间无法建立直接联系,这时候就涉及到了第三方连接工具.NET,以此来建立C#与MySQL数据库的连接 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留

    2024年02月05日
    浏览(69)
  • uniapp使用express连接mysql数据库

    使用win+R再输入cmd打开命令提示符,输入如下内容全局安装脚手架 npm i express-generator -g 可以在命令提示符中cd到自己项目的根目录下,也可以在HBuilder X里内置的终端运行代码  C:HBuilderProjectswordman express --view=ejs server 说明:前面是项目的根目录,express --view=ejs projectName proje

    2024年02月06日
    浏览(121)
  • Navicat (连接mysql数据库)的基本使用

    目录 前言 一、navicat-15的下载安装 二、navicat连接数据库 1、登录 2、连接数据库失败情况 3、登录数据库需要授权 三、navicat的基础操作  ☆ 1、数据库的基本操作 2、对表进行操作 3、sql 语句管理数据库  4、用户管理 5、 视图的创建 6、表的导入与导出  7、数据库的备份 

    2024年02月04日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包