前提条件: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
至此,收工。