12_MySQL数据库_CentOS7下C-C++链接MySQL

此专栏所有章节快速导航

01_MySQL数据库_CentOS7安装MySQL
02_MySQL数据库_数据库基础知识
03_MySQL数据库_库的操作
04_MySQL数据库_表的操作
05_MySQL数据库_数据类型
06_MySQL数据库_表的约束
07_MySQL数据库_增删查改
08_MySQL数据库_复合查询
09_MySQL数据库_索引
10_MySQL数据库_事务管理
11_MySQL数据库_用户管理
12_MySQL数据库_CentOS7下C-C++链接MySQL

一. 链接mysqlclient动态库时报错

1.1 报错提示信息

/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/ld: 找不到 -lmysqlclient collect2: error: ld returned 1 exit status make: *** [test_mysql] 错误 1

1.2 分析原因

提示结果为找不到动态库,经过排查我发现mysql的动静态库安装时不在/usr/lib64下,而是在/usr/lib64/mysql目录下,如下图所示

在这里插入图片描述

1.3 解决方法

下面是我的Makefile文件

test_mysql:test_mysql.cpp
	g++ -o $@ $^  -std=c++11 -L/usr/lib64/mysql -lmysqlclient  # 编译时用-L指明所在目录
.PHONY:clean
clean:
	rm -rf test_mysql

二. C/C++链接MySQL代码部分

#include <iostream>
#include <cstdio>
#include <mysql/mysql.h>
#include <string>
const char* const host = "127.0.0.1";  // 数据库所在主机的IP地址
const char* const user = "lihua";  // 数据库用户名
const char* const password = "Ji3#.10086";  // 数据库用户对应的密码
const char* const db = "db_for_lihua";  // 需要操作的数据库
const unsigned int port = 3306;  // 数据库端口号

int main()
{
    // 1. 创建mysql句柄
    MYSQL* mysql1 = mysql_init(nullptr);
    
    // 获取mysql数据库版本信息
    //std::cout << "mysql version:" << mysql_get_client_info() << std::endl;
	
    // 2. 连接数据库
	if (mysql_real_connect(mysql1, host, user, password, db, port, nullptr, 0) == nullptr)
	{
        std::cerr << "connet failed!" << std::endl;
        return 1;
	}
    else 
    {

        std::cout << "connect success!" << std::endl;

        // 设置连接的编码格式
        mysql_set_character_set(mysql1, "utf8");  // 如果发现插入数据为乱码就需要改一下编码格式

        // 3. 执行sql语句
        
        // 3.1 插入
        // std::string sql = "insert into student(name) value('李华')";
        
        // 3.2 查询
        std::string sql = "select * from student";
        
        // 执行sql语句
        int code = mysql_query(mysql1, sql.c_str());
        if (code != 0)
        {
            std::cerr << "execute:" << sql << " failed" << std::endl;
        }
        else 
        {
            std::cout << "execute:" << sql << "success" << std::endl;

            // 3.2.1 获取查询结果的行号和列号
            MYSQL_RES* result = mysql_store_result(mysql1);
            int row = mysql_num_rows(result);
            int col = mysql_num_fields(result);

            // 3.2.2 获取字段名
            MYSQL_FIELD* field = mysql_fetch_fields(result);
            for (int i = 0; i < col; i++)
            {
                std::cout << field[i].name << "\t";
            }
            std::cout << std::endl;

            // 3.2.3 获取查询的结果(不包括字段行)
            for (int i = 0; i < row; i++)
            {
                MYSQL_ROW line = mysql_fetch_row(result);  // MYSQL_ROW是一个二级指针
                for (int j = 0; j < col; j++)
                {
                    std::cout << line[j] << "\t";
                }
                std::cout << std::endl;
            }
            //free(result_backup);
        }
    }
    
    mysql_close(mysql1);
    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柿子__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值