连接库下载
- 要想用c语言连接mysql,我们需要从mysql官网下载mysql提供的连接库
选择c api


最后挑选自己的配置即可。
如果我们一开始使用yum源安装的话,他已经自动帮我们安装了连接库了,无需手动安装。
我们还可以用apt包直接下载:
sudo apt update sudo apt install libmysqlclient-dev
最后我们可以检测是否存在mysql.h:
zhangwho@vm-0-2-ubuntu:~$ find /usr -name "mysql.h" /usr/include/mysql/mysql.h
mysql接口介绍
我们可以用官网获取详细的接口介绍。
那么我们先介绍一些简单的接口:
首先要初始化:
mysql_init()

可以看到其返回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_soc unsigned long clientflag);
为了便于测试,我们先创建用于连接的用户和数据库:

mysql> create database conn;
query ok, 1 row affected (0.02 sec)
mysql> use conn;
database changed
mysql> create table test(
-> id int primary key auto_increment,
-> name varchar(20) not null,
-> age tinyint default 18
-> );
query ok, 0 rows affected (0.04 sec)
mysql> grant all on conn.* to 'conn'@'localhost';
query ok, 0 rows affected (0.01 sec)
连接数据库后通过mysql_query调用mysql:
int mysql_query(mysql *mysql, const char *q);
我们先简单连接一下:
#include <iostream>
#include <mysql/mysql.h>
int main()
{
mysql* mysql=mysql_init(nullptr);
mysql=mysql_real_connect(mysql,"localhost","conn","123456","conn",3306,nullptr,0);
if(mysql==nullptr)
std::cerr<<"mysql connect errot\n";
mysql_close(mysql);
return 0;
}
当然这样不能有什么效果,我们故意将密码写错:
zhangwho@vm-0-2-ubuntu:~/trainning/2026_1_29$ ./test mysql connect error
很好,接下里我们尝试插入数据:
#include <iostream>
#include <mysql/mysql.h>
int main()
{
mysql* mysql=mysql_init(nullptr);
mysql=mysql_real_connect(mysql,"localhost","conn","123456","conn",3306,nullptr,0);
if(mysql==nullptr)
{
std::cerr<<"mysql connect error\n";
return 1;
}
if(mysql_query(mysql,"insert into test(name) values('alice')"))
std::cerr<<"mysql query error\n";
else
std::cout<<"mysql query success\n";
mysql_close(mysql);
return 0;
}

没问题。
继续插入:
if(mysql_query(mysql,"insert into test(name) values('张三')"))

也没问题,说明我们的编码格式适配的很好。
那么我们尝试select:
if(mysql_query(mysql,"select * from test"))
std::cerr<<"mysql query error\n";
else
std::cout<<"mysql query success\n";
zhangwho@vm-0-2-ubuntu:~/trainning/2026_1_29$ ./test mysql query success
成功是成功了,但是没有什么结果啊!
我们还需要其他接口:
mysql_res *mysql_store_result(mysql *mysql);
该函数会调用mysql变量中的st_mysql_methods中的 read_rows 函数指针来获取查询的结果。同时该函数会返回mysql_res 这样一个变量,该变量主要用于保存查询的结果。同时该函数malloc了一片内存空间来存储查询过来的数据,所以我们一定要记的 free(result),不然是肯定会造成内存泄漏的。 执行完mysql_store_result以后,其实数据都已经在mysql_res 变量中了,下面的api基本就是读取mysql_res 中的数据。
我们可以看到mysql_res的结构:

此外,还能通过接口直接获取mysql_res的数据:
获取结果行数mysql_num_rows
my_ulonglong mysql_num_rows(mysql_res *res);
获取结果列数mysql_num_fields
unsigned int mysql_num_fields(mysql_res *res);
获取列名mysql_fetch_fields
mysql_field *mysql_fetch_fields(mysql_res *res);
获取结果内容mysql_fetch_row
mysql_row mysql_fetch_row(mysql_res *result);
最后释放mysql_res
void mysql_free_result(mysql_res *result);
那么接下来我们就可以如此操作:
//获取列名
for(int i=0;i<col;i++)
{
std::cout<<filed[i].name<<'\t';
}
std::cout<<std::endl;
//获取内容
mysql_row line;
for(int i=0;i<row;i++)
{
line=mysql_fetch_row(res);
for(int j=0;j<col;j++)
{
std::cout<<line[j]<<'\t';
}
std::cout<<std::endl;
}
mysql_free_result(res);
输出:
zhangwho@vm-0-2-ubuntu:~/trainning/2026_1_29$ ./test mysql query success id name age 1 alice 18 2 张三 18
没有问题
workbench
workbench是mysql官网提供的图形化界面
我们可以在win上下载workbench,当然同时要先下载mysql。
如果不想两个分开下载,我们可以下载mysql installer

选择下面的安装包,然后:

选择full即可。
在等待下载的这段时间,我们可以将conn的登录主机改为%:
mysql> update user set host='%' where user='conn';
query ok, 1 row affected (0.01 sec)
rows matched: 1 changed: 1 warnings: 0
mysql> select host,user,authentication_string from user;
+-----------+------------------+------------------------------------------------------------------------+
| host | user | authentication_string |
+-----------+------------------+------------------------------------------------------------------------+
| % | conn | $a$005$o`unf%\r~f~%5
3hmgs258v3vdpbstfytu4gytbycdhgisjpwugjkm.k6b8 |
| localhost | mysql.infoschema | $a$005$thisisacombinationofinvalidsaltandpasswordthatmustneverbrbeused |
| localhost | mysql.session | $a$005$thisisacombinationofinvalidsaltandpasswordthatmustneverbrbeused |
| localhost | mysql.sys | $a$005$thisisacombinationofinvalidsaltandpasswordthatmustneverbrbeused |
| localhost | root | $a$005$c3ocz*k@w6s4#r)od1tobstybtxtwaeez1kfz9mbvfir4ld3x/1vxhtrnd |
+-----------+------------------+------------------------------------------------------------------------+
5 rows in set (0.00 sec)
当然这样修改是不足的,还需要对一些权限进行修改。最好就是删除了重新创建用户。
随后我们使用这个账户继续进行测试.

选择+,添加新的连接:


如此我们就能对数据库进行操作:

我们能直接在图形界面写入数据,然后点击右下角的apply

他就会自动写入相应的sql语句。
总之就是这样!
总结
到此这篇关于mysql用c/c++连接的文章就介绍到这了,更多相关mysql用c/c++连接内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论