Linux - 连接mysql数据库
运行环境:
Ubuntu20.04 ,虚拟机VMware
Mysql 8.0 API libmysqlclient-dev
MysqlServer version: 8.0.33-0ubuntu0.20.04.2 (Ubuntu)
注意:执行以下步骤需要提前安装好mysql之后再操作,如果没有安装好mysql请自行安装好。
1. 准备工作
1.1 在Ubuntu上准备mysql开发环境
更新软件源
sudo apt-get update #更新软件源
安装libmysqlclient-dev
,这个lib库是Linux下C/C++连接mysql的客户端
sudo apt-get install libmysqlclient-dev #安装开发包
1. 2 创建测试数据库与表
在mysql中创建一个名为C_DB
的数据库,在库中建立一张名为C_TBL
的表
CREATE DATABASE C_DB;--创建数据库
USE C_DB;--选择数据库
--创建表
CREATE TABLE C_TBL(
ID INT PRIMARY KEY AUTO_INCREMENT,#主键且自增
NAME VARCHAR(32),
SEX VARCHAR(8)
);
2. 与mysql建立连接
2.1 在C文件中引入头文件
在C文件中引入头文件#inlude <mysql.h>
通过MYSQL mysql;
创建一个mysql结构体对象MYSQL
结构体定义在mysql.h
里
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
int main()
{
//固定不变的
MYSQL mysql; //一个数据库结构体
MYSQL_RES* res; //一个结果集结构体
MYSQL_ROW row; //char** 二维数据,存放一条条记录
return 0;
}
2.2 初始化mysql与数据库的通道
mysql_init
函数初始化失败会返回NULLmysql_error
是mysql API提供的标准错误
if(mysql_init(&mysql) == NULL)
{
printf("%s",mysql_error(&mysql));
return -1;
}
2.3 与mysql建立真实连接
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
int main()
{
//固定不变的
MYSQL mysql; //一个数据库结构体
MYSQL_RES* res; //一个结果集结构体
MYSQL_ROW row; //char** 二维数据,存放一条条记录
//初始化数据库
mysql_init(&mysql);
//设置编码方式
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");
//连接数据库 //ip地址 //用户名 //密码 //数据库名
if (mysql_real_connect(&mysql, "localhost", "root", "123456", "C_DB", 3306, NULL, 0))
{
printf("数据库连接成功!\n");
}
else
{
printf("数据库连接失败!\n");
printf("错误原因:%s\n", mysql_error(&mysql));
exit(-1);
}
return 0;
}
将上述代码保存为test_mysql.c。上述代码中,我们需要包含mysql.h头文件来使用mysql提供的API对MySQL进行操作。
程序写好了,编译过程需要加入链接信息。
注意:使用<mysql.h>
头文件在编译时需要加上-lmysqlclient -I/usr/include/mysql/ -L/usr/lib/mysql
#方式1:
sudo gcc test_mysql.c -o test_mysql.o -lmysqlclient -I/usr/include/mysql/ -L/usr/lib/mysql
#方式2:
sudo gcc -I/usr/include/mysql test_mysql.c -L/usr/lib/mysql -lmysqlclient -o test_mysql.o
好了,程序成功编译,运行一下试试吧
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构