C语言操作MYSQL

C语言操作MySQL数据库:从环境搭建到实战案例

在后端开发与嵌入式开发领域,C语言结合MySQL数据库能高效实现数据的存储与管理。想要用C语言操作MySQL,核心是借助libmysqlclient-dev开发包提供的API接口,完成从环境搭建、数据库连接到数据增删改查的全流程操作。

一、环境搭建:打好操作基础

想要用C语言操作MySQL,第一步要完成服务端、客户端及开发包的安装部署,确保开发环境完整可用。

  1. 安装MySQL服务端与客户端

  2. 在Ubuntu系统中,可通过命令sudo apt-get install mysql-server完成安装。需要注意的是,Ubuntu18.04版本安装过程中不会弹出密码输入提示,这和Windows系统的安装流程有区别。

  3. 安装MySQL开发包

  4. 开发包libmysqlclient-dev是C语言操作MySQL的关键,它提供了所需的API接口。安装命令为sudo apt-get install libmysqlclient-dev。如果编译时提示找不到mysql.h头文件,可尝试安装libmysqld-dev解决问题。

  5. 验证安装结果

  6. 输入sudo netstat -tap | grep mysql命令,若能看到mysqld进程处于监听状态,就说明MySQL服务已经成功启动。

二、MySQL登录与密码配置

安装完成后,需要通过客户端登录MySQL,同时为了保证数据库安全,还需正确配置root账户密码。

  1. 基础登录操作

  2. 使用sudo mysql -u root -p命令可以登录MySQL。在Ubuntu系统中,该命令可绕过密码直接登录,这是系统的默认特性。

  3. root密码修改步骤

  4. 首先执行sudo cat /etc/mysql/debian.cnf命令,查看系统默认生成的账户和密码;接着使用该账户登录MySQL,执行use mysql命令切换到mysql数据库;然后运行update mysql.user set authentication_string=password('新密码') where user='root';update user set plugin="mysql_native_password";命令修改密码并配置认证插件;之后执行flush privileges;刷新权限,最后退出并重启MySQL服务。

  5. 密码策略问题解决

  6. 若修改密码时出现ERROR 1819错误,说明密码不符合安全策略要求。可执行set global validate_password_policy=0;命令降低策略要求,同时设置密码长度不少于8位。

三、C语言操作MySQL核心流程

C语言操作MySQL的核心是调用libmysqlclient-dev提供的API函数,遵循"初始化-连接-执行SQL-处理结果-释放资源"的流程。

  1. 准备测试数据

  2. 先通过MySQL客户端创建测试环境,执行create database ljs;命令创建数据库,use ljs;命令切换数据库,create table stu( id int,name varchar(20) );命令创建数据表,再用insert into stu (id,name) values(1,"ljs");命令插入测试数据。

  3. 关键API函数解析

    1. 初始化连接mysql_init()函数用于初始化MYSQL结构体,它是所有操作的基础。传入NULL时,函数会自动分配并初始化结构体。
    2. 建立连接mysql_real_connect()函数负责连接数据库,需要传入主机地址、用户名、密码、数据库名、端口等参数。连接成功后返回有效的MYSQL句柄,失败则返回NULL。
    3. 执行SQL语句mysql_real_query()函数用于执行SQL语句,支持插入、删除、查询等所有操作,执行成功返回0。
    4. 处理查询结果mysql_store_result()函数用于获取查询结果集,搭配mysql_fetch_row()函数可逐行读取数据,mysql_num_fields()函数能获取结果集的列数。
    5. 释放资源 :操作完成后,需调用mysql_free_result()释放结果集内存,使用mysql_close()关闭数据库连接。
  4. 字符集设置

  5. 当操作中文数据时,需调用mysql_set_character_set(mysql,"utf8");函数设置字符集,避免出现中文乱码问题。

四、实战案例:实现数据插入与查询

以下是一个完整的C语言操作MySQL的案例,实现了数据插入和查询功能。

C 复制代码
#include<stdio.h>
#include<mysql/mysql.h>
#include<string.h>

int main()
{
    MYSQL *mysql = mysql_init(NULL);
    // 连接数据库
    if(NULL == mysql_real_connect(mysql,"localhost","root","123456","ljs",3306,NULL,0))
    {
        fprintf(stderr, "连接失败: %s\n", mysql_error(&mysql));
        return -1;
    }
    printf("连接成功\n");

    char sql_str[200] = {0};
    // 执行插入操作
    sprintf(sql_str,"insert into stu(id,name) values (20,'wzz')");
    mysql_real_query(mysql,sql_str,strlen(sql_str));
    memset(sql_str,0,200);

    // 执行查询操作
    sprintf(sql_str,"select * from stu");
    mysql_real_query(mysql,sql_str,strlen(sql_str));

    // 处理查询结果
    MYSQL_RES *result = mysql_store_result(mysql);
    unsigned int fieldnum = mysql_num_fields(result);
    MYSQL_ROW rows;

    printf("表内容显示为:\n");
    while(rows = mysql_fetch_row(result))
    {
        for(int i=0; i < fieldnum; i++)
        {
            printf("%12s",rows[i]);
        }
        printf("\n");
    }

    // 释放资源
    mysql_free_result(result);
    mysql_close(mysql);
    return 0;
}

编译并运行该程序的命令为sudo gcc test_mysql.c -lmysqlclient -o test_mysql,执行./test_mysql即可看到查询结果。

五、总结

C语言操作MySQL的关键在于熟练掌握libmysqlclient-dev的API函数,遵循规范的开发流程。在实际开发中,要注意编译时链接mysqlclient库,操作中文数据时设置正确的字符集,使用完资源后及时释放,避免内存泄漏。通过以上步骤,就能高效地实现C语言与MySQL数据库的交互。

相关推荐
Logic1011 小时前
C语言/数据结构位运算题解:异或XOR找出蛋糕订单中的“VIP独特口味“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出飞行棋中的“独特颜色棋子“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
毕业设计7033 小时前
(免费领源码) 基于微信小程序的预制菜商城的设计与实现25172-java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·python·mysql·微信小程序·pycharm·微信开发者工具·推荐算法
Logic1014 小时前
C语言/数据动态规划题解:翻转一次子数组后的最大子数组和——四状态DP(O(n)时间O(1)空间)
c语言·数据结构·动态规划·时间复杂度·算法题·状态机dp·最大子数组和
泡泡鱼(敲代码中)5 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
Logic1015 小时前
C语言/数据结构字符串题解:找出DNA序列中未配对的独特序列——排序+遍历(O(nlogn))
c语言·数据结构·字符串·数组·排序·时间复杂度·算法题
Navigator_Z6 小时前
LeetCode //C - 1248. Count Number of Nice Subarrays
c语言·算法·leetcode
是隼人6 小时前
buuctf-pwn picoctf_2018_shellcode(ret2shellcode)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
冰暮流星6 小时前
mysql之表子查询
数据库·mysql
潜创微科技6 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳