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 

至此,收工。

相关推荐
Yushan Bai2 小时前
ORACLE RAC环境REDO日志量突然增加的分析
数据库·oracle
躺着听Jay2 小时前
Oracle-相关笔记
数据库·笔记·oracle
瀚高PG实验室2 小时前
连接指定数据库时提示not currently accepting connections
运维·数据库
运维成长记3 小时前
mysql数据库-中间件MyCat
数据库·mysql·中间件
尘客.3 小时前
DataX从Mysql导数据到Hive分区表案例
数据库·hive·mysql
华纳云IDC服务商4 小时前
SQL Server权限设置的几种方法
mysql·sqlserver
TiDB 社区干货传送门4 小时前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
虾球xz4 小时前
游戏引擎学习第280天:精简化的流式实体sim
数据库·c++·学习·游戏引擎
uwvwko5 小时前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
今天我又学废了5 小时前
Spark,SparkSQL操作Mysql, 创建数据库和表
大数据·mysql·spark