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

相关推荐
2401_858936882 小时前
【Linux C 编程】标准 IO 详解与实战:从基础接口到文件操作实战
linux·c语言
季明洵4 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
·云扬·4 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
浅念-5 小时前
C语言编译与链接全流程:从源码到可执行程序的幕后之旅
c语言·开发语言·数据结构·经验分享·笔记·学习·算法
爱吃生蚝的于勒5 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森5 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
筵陌6 小时前
MySQL索引及其底层原理(上)
mysql
C++ 老炮儿的技术栈6 小时前
Qt 编写 TcpClient 程序 详细步骤
c语言·开发语言·数据库·c++·qt·算法
怣506 小时前
MySQL子查询零基础入门教程:从小白到上手(零基础入门版)
数据库·mysql
wangjialelele7 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发