C 语言通用MySQL 功能增删查改功能.

前提条件:Ubuntu 22.04.4 LTS、MSQL 8数据库

并且已经安装MySQL 8 开发库。如果没有安装,可以查考:C 语言连接MySQL数据库

项目要求:

1、完成MySQL数据库增删改查通用功能封装

2、编辑makefile 文件实现项目动态更新和快速编译

项目结构:

common_mysql.h 通用数据库基础功能

#include <mysql/mysql.h>

// 数据库连接
MYSQL* connectDB(const char *ip, const char *username, const char *password, const char *databasenName, unsigned int port);

// SQL语句执行
int executeQuery(MYSQL* conn, const char* query);

// SQL 语句执行并返回查询结果
void printResults(MYSQL* conn, const char* query);

// 关闭数据库连接
int closeConnectDB(MYSQL* conn);

common_mmysql.c 通用数据库基础功能实现

#include "common_mysql.h"
#include <stdio.h>

// 数据库连接
MYSQL* connectDB(const char *ip, const char *username, const char *password, const char *databasenName, unsigned int port){
    MYSQL *conn = mysql_init(NULL);
    
    if (conn == NULL) {
        fprintf(stderr, "mysql_init() 初始化失败\n");
        return NULL;
    }

    if (mysql_real_connect(conn, ip, username, password, databasenName, port, NULL, 0) == NULL) {
        fprintf(stderr, "mysql_real_connect() failed: %s\n", mysql_error(conn));
        mysql_close(conn);
        return NULL;
    }

    return conn;
}

// SQL 语句执行  0 =执行成功, 1= 执行失败
int executeQuery(MYSQL* conn, const char* query){
      if (mysql_query(conn, query) != 0) {
        fprintf(stderr, "mysql_query() 失败: %s\n", mysql_error(conn));
        return 1;
    }
    
    return 0;
}
// SQL 语句执行并返回执行结果
void printResults(MYSQL* conn, const char* query){
     if (mysql_query(conn, query) != 0) {
        fprintf(stderr, "mysql_query() 失败: %s\n", mysql_error(conn));
        return;
    }

    MYSQL_RES *result = mysql_store_result(conn);
    if (result != NULL) {
        MYSQL_ROW row;
        while ((row = mysql_fetch_row(result)) != NULL) {
            for (int i = 0; i < mysql_num_fields(result); i++) {
                printf("%s ", row[i] ? row[i] : "NULL");
            }
            printf("\n");
        }
        mysql_free_result(result);
    }
}


int closeConnectDB(MYSQL* conn){
    mysql_close(conn);
    return 0;
}

database_sys.c: 基于数据库通用功能应用

#include<stdio.h>
#include "common_mysql.h"

// 常量定义
#define IP "192.168.60.94"
#define USERNAME "root"
#define PASSWORD "123456"
#define DATABASENAME "base"
#define PORT 3306

int main(void){
    // 数据库连接
    MYSQL* connect = connectDB(IP, USERNAME, PASSWORD,  DATABASENAME, PORT);
    
    // 判断数据连接是否为空
    if(connect == NULL){
        return 1;
    }

    // 执行SQL 语句
    printResults(connect, "select * from base_user");

    // 关闭数据库连接
    closeConnectDB(connect);
    return 0;
}

MakeFile 自动化编译文件

SOURCES = $(wildcard *.c)  
OBJS = $(patsubst %.c,%.o,$(SOURCES))  
CC = gcc
CFLAGS = -g
TARGET = MySQLDemo

# 通过mysql_config 命令查看MySQL 库文件地址
LIB_PATH = -L/usr/lib/x86_64-linux-gnu -lmysqlclient -lzstd -lssl -lcrypto -lresolv -lm

$(TARGET) : $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^ $(LIB_PATH)
$(OBJS): %.o :%.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:  
	rm -rf $(TARGET) $(OBJS)

Ubuntu 命令控制台,查看MySQL 配置信息:

wz2012@LAPTOP-8R0KHL88:~$ mysql_config
Usage: /usr/bin/mysql_config [OPTIONS]
Compiler: GNU 11.4.0
Options:
        --cflags         [-I/usr/include/mysql ]
        --cxxflags       [-I/usr/include/mysql ]
        --include        [-I/usr/include/mysql]
        --libs           [-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lzstd -lssl -lcrypto -lresolv -lm]
        --libs_r         [-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lzstd -lssl -lcrypto -lresolv -lm]
        --plugindir      [/usr/lib/mysql/plugin]
        --socket         [/var/run/mysqld/mysqld.sock]
        --port           [0]
        --version        [8.0.37]
        --variable=VAR   VAR is one of:
                pkgincludedir [/usr/include/mysql]
                pkglibdir     [/usr/lib/x86_64-linux-gnu]
                plugindir     [/usr/lib/mysql/plugin]

项目运行结果:

wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code/数据库管理系统$ ./MySQLDemo
1 31 张三修该 广东省 深圳市 福田区 NULL 
2 19 李四 湖南省 长沙市 开福区 NULL 

至此,收工。

相关推荐
精进攻城狮@27 分钟前
Redis(value的数据类型)
数据库·redis
爪哇学长34 分钟前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
mybatisPlus打印sql配置
数据库·sql
弗拉唐1 小时前
将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
数据库·excel
刘艳兵的学习博客1 小时前
刘艳兵-DBA033-如下那种应用场景符合Oracle ROWID存储规则?
服务器·数据库·oracle·面试·刘艳兵
simpleGq2 小时前
Redis知识点整理 - 脑图
数据库·redis·缓存
NiNg_1_2342 小时前
关系型数据库和非关系型数据库详解
数据库·oracle·nosql
paopaokaka_luck2 小时前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
python资深爱好者2 小时前
NoSQL数据库与关系型数据库的主要区别
数据库·oracle·nosql
sj11637394032 小时前
Kafka参数了解
数据库·分布式·kafka