MySQL基础教程——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、一些获取结果的函数接口

这些接口的参数都依赖于上一个介绍的接口的返回值。

  1. 获取结果行数

my_ulonglong mysql_num_rows(MYSQL_RES *res);

  1. 获取结果列数

unsigned int mysql_num_fields(MYSQL_RES *res);

  1. 获取列名

MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);

  1. 获取结果内容

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访问的内容了,也是十分基础简单。如果喜欢我的内容,请点赞、收藏加关注,多多支持我这个编程小白啊,以及欢迎各位在评论区讨论交流,并指出我的不足,谢谢大家。