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数据库的交互。

相关推荐
梵刹古音2 小时前
【C语言】 定义变量
c语言·开发语言·嵌入式
我能坚持多久2 小时前
D19—C语言动态内存管理全解:从malloc到柔性数组
c语言·开发语言·柔性数组
代码无bug抓狂人2 小时前
C语言之宝石组合(蓝桥杯省B)
c语言·开发语言·蓝桥杯
Nandeska2 小时前
11、MySQL主从复制的基本概念
数据库·mysql
LYS_06182 小时前
寒假学习(9)(C语言9+模数电9)
c语言·开发语言·学习
pcm1235672 小时前
设计C/S架构的IM通信软件(2)
java·c语言·架构
枫叶丹42 小时前
【Qt开发】Qt系统(十)-> Qt HTTP Client
c语言·开发语言·网络·c++·qt·http
范纹杉想快点毕业2 小时前
自学嵌入式系统架构设计:有限状态机入门完全指南,C语言,嵌入式,单片机,微控制器,CPU,微机原理,计算机组成原理
c语言·开发语言·单片机·算法·microsoft
leiming62 小时前
c语言更进一步
c语言·开发语言