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 

至此,收工。

相关推荐
切糕师学AI28 分钟前
HBase:一文搞懂分布式宽列数据库(原理 + 架构 + 实战)
数据库·分布式·nosql·hbase·分布式宽列数据库·wide column db
competes32 分钟前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql
qq_372906931 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发)
jvm·数据库·python
lcj09246661 小时前
磁控U位管理系统与DCIM对接实现:筑牢数据中心精细化运维底座
大数据·数据库·人工智能
独自归家的兔1 小时前
OCPP 1.6 协议详解:StatusNotification 状态通知指令
开发语言·数据库·spring boot·物联网
qq_372154232 小时前
SQL嵌套查询中常见报错排查_语法与权限处理
jvm·数据库·python
0xDevNull2 小时前
MySQL 别名(Alias)指南:从入门到避坑
java·数据库·sql
2401_887724503 小时前
CSS如何设置文字溢出显示省略号_利用text-overflowellipsis
jvm·数据库·python
m0_747854523 小时前
golang如何实现应用启动耗时分析_golang应用启动耗时分析实现思路
jvm·数据库·python
雪碧聊技术3 小时前
下午题_试题二
数据库