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 

至此,收工。

相关推荐
曹牧1 小时前
Oracle:前缀匹配之REGEXP_LIKE
数据库·oracle
暴躁小师兄数据学院3 小时前
【AI大数据工程师特训笔记】第05讲:关联查询
数据库·sql·oracle
倔强的石头_4 小时前
《Kingbase护城河》——跨平台环境下的数据库联调实战
数据库
lzhdim4 小时前
SQL 入门 17:MySQL 数据类型:从字符串到 JSON 的全面解析
数据库·sql·mysql·json
骄马之死4 小时前
MySQL-InnoDB 核心原理
mysql
杨云龙UP4 小时前
Oracle RAC / ODA 生产环境指定 PDB 启动 SOP
linux·运维·数据库·oracle
kingwebo'sZone4 小时前
在Cent上安装Mysql 8.0的遇到的问题和解决办法
数据库·mysql·adb
幽络源小助理4 小时前
最新知识付费系统网站源码 PC+H5双端 附安装教程 – 幽络源源码网
大数据·数据库
小白考证进阶中5 小时前
Oracle OCP证书报考&考试全指南
数据库·oracle·oracle ocp·ocp认证·oracle认证·甲骨文认证·oracle ocp题库
Leon-Ning Liu6 小时前
【真实经验分享】 ORA-600 [qesmaGetTblSeg1]
数据库·oracle