@
目录
- 前言
- 一、MySQL客户端的安装
- [二、Connector/C 使用](#二、Connector/C 使用)
- 结语
前言
在学习了MySQL许多的基础知识后,我们本期来介绍如何用c语言来连接mysql,并简要介绍如何使用mysql官网提供的库。本期我们主要介绍Linux下的Ubuntu系统的操作,windows只做简要介绍。
一、MySQL客户端的安装
在使用mysql官网提供的c语言库前,我们要做的就是安装其客户端,因为c语言库就在MySQL的客户端里,而我们之前使用MySQL其实是一直在使用其服务端。
(一)Ubuntu下的安装
bash
sudo apt update
# c 版本
sudo apt install libmysqlclient-dev
# c++版本
sudo apt install libmysqlcppconn-dev
通过上诉指令,便能成功安装MySQL的C语言开发库了。
(二)Windows下的安装
在此处我们给出MySQL官网下载链接: MySQL官网链接
在 MySQL Installer for Windows 处可以给你的windows下载MySQL的服务端,在 C API (libmysqlclient) 处便是我们所要用到的内容,如有其他语言使用需求也可进按需下载。
二、Connector/C 使用
(一)常见接口介绍
1、初始化mysql_init
MYSQL *mysql_init(MYSQL *mysql);
要使用库,必须先进行初始化。
2、链接数据库mysql_real_connect
初始化完毕之后,必须先链接数据库,在进行后续操作。而mysql网络部分是基于TCP/IP的。
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 clientflag);
其第一个参数即为mysql_init()的返回值,而其他我们需要关注的参数如:host "localhost"/其他主机ip;user、passwd MySQL的用户与密码;dp 是所使用的数据库;port 要访问的MySQL服务端的端口号,MySQL默认端口号为3306。
3、下发mysql命令mysql_query
int mysql_query(MYSQL *mysql, const char *q);
此处第一个参数上面已经介绍过,第二个参数为要执行的sql语句,如"select * from table"等。
4、获取执行结果mysql_store_result
如果mysql_query返回成功,那么我们就可以通过mysql_store_result这个函数来读取结果。
MYSQL_RES *mysql_store_result(MYSQL *mysql);
该函数会返回MYSQL_RES 这样一个变量,该变量主要用于保存查询的结果。同时该函数malloc了一片内存空间来存储查询过来的数据,所以我们一定要记得用 mysql_free_result() 来释放结果集内存,不然会造成内存泄漏。
5、一些获取结果的函数接口
这些接口的参数都依赖于上一个介绍的接口的返回值。
- 获取结果行数
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);
其返回参数MYSQL_ROW可当作个char** 来使用。
6、关闭mysql链接
void mysql_close(MYSQL *sock);
7、事务等常用操作
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);
(二)使用案例
cpp
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
int main()
{
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
// 1. 初始化MySQL连接句柄
conn = mysql_init(NULL);
if (conn == NULL)
{
fprintf(stderr, "错误: mysql_init() 失败\n");
return 1;
}
// 2. 连接到MySQL服务器
// 请将 "host", "user", "password", "database_name" 替换为你的实际信息
// 参数: 句柄, 主机, 用户名, 密码, 数据库名, 端口(0为默认3306), unix_socket, client_flag
if (mysql_real_connect(conn, "localhost", "your_username", "your_password", "your_database", 0, NULL, 0) == NULL)
{
fprintf(stderr, "错误: mysql_real_connect() 失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
printf("数据库连接成功!\n");
// 3. 执行SQL查询语句
if (mysql_query(conn, "SELECT * FROM your_table"))
{
fprintf(stderr, "错误: mysql_query() 失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// 4. 获取并处理查询结果集
res = mysql_store_result(conn);
if (res == NULL)
{
fprintf(stderr, "错误: mysql_store_result() 失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// 获取结果集的行数
int num_rows = mysql_num_rows(res);
printf("查询到 %d 条记录:\n", num_rows);
// 循环打印每一行数据,假设表有两列
while ((row = mysql_fetch_row(res)) != NULL)
{
printf("%s \t %s\n", row[0] ? row[0] : "NULL", row[1] ? row[1] : "NULL");
}
// 5. 释放结果集内存
mysql_free_result(res);
// 6. 关闭数据库连接
mysql_close(conn);
printf("数据库连接已关闭。\n");
return 0;
}
在使用的时候,我们要#include <mysql/mysql.h> 加头文件,同时在编译时在编译选项上加上 -lmysqlclient。
如:
bash
gcc -o test_mysql test_mysql.c -lmysqlclient
结语
以上便是MySQL访问的内容了,也是十分基础简单。如果喜欢我的内容,请点赞、收藏加关注,多多支持我这个编程小白啊,以及欢迎各位在评论区讨论交流,并指出我的不足,谢谢大家。