最近老师让我实现这个功能,顺便发个东西,我感觉mysql从入门到精通这本书写的蛮好的,其实连接数据库就是调用mysql-c-api库里面的函数mysql_real_connect,下来的增删改查,也无非就是cmd命令台里面的语句,插入:insert into.....values......;删除:delete from.....;更新:update set......;查询:select*from......
#define _CRT_SECURE_NO_WARNINGS
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
// 连接数据库函数
bool ConnectDatabase(MYSQL* mysql) {
// 初始化数据库
mysql_init(mysql);//初始化传入的 MYSQL 结构体,设置其内部状态为默认值,准备进行数据库连接
// 设置字符编码
mysql_options(mysql, MYSQL_SET_CHARSET_NAME, "gbk");
// 连接数据库
if (mysql_real_connect(mysql, "127.0.0.1", "root", "Zyc679613", "db_test", 3306, NULL, 0) == NULL) {//3306端口号
printf("错误原因: %s\n", mysql_error(mysql));
printf("连接失败!\n");
return false;
}
return true;
}
// 断掉数据库连接的函数
void DisconnectDatabase(MYSQL* mysql) {
if (mysql != NULL) {
mysql_close(mysql);//自带的关闭函数
}
}
// 执行SQL查询并返回结果
MYSQL_RES* ExecuteQueryAndGetResult(MYSQL* mysql, const char* query) {
if (mysql_query(mysql, query)) {//mysql_query 是一个PHP函数,它用于执行一个MySQL数据库查询
printf("Query failed: %s\n", mysql_error(mysql));
return NULL;
}
return mysql_store_result(mysql);
}
// 插入数据函数
void InsertData(MYSQL* mysql, const char* books, const char* category, const char* user, int sale, const char* sort, const char* brands) {
char query[256];//整一个足够大的字符数组
snprintf(query, sizeof(query), "INSERT INTO tb_books (books, category, user, sale, sort, brands) VALUES ('%s', '%s', '%s', %d, '%s', '%s')",
books, category, user, sale, sort, brands);//snprintf返回成功写入的字符,第一个参数指针,第二个大小,第三个格式化。
if (mysql_query(mysql, query)) {//snprintf 将 SQL 插入语句格式化并写入到 query 数组中,sizeof(query) 确保了写入不会超过数组的大小,从而避免了潜在的安全问题。
printf("Insert failed: %s\n", mysql_error(mysql));
}
else {
printf("Insert successful!\n");
}
}
// 查询数据函数,展示函数
void SelectData(MYSQL* mysql) {
MYSQL_RES* res = ExecuteQueryAndGetResult(mysql, "SELECT * FROM tb_books");
if (res) {//非空
MYSQL_ROW row;//指向行数据的指针
while ((row = mysql_fetch_row(res))) {//mysql_fetch_row 来逐行获取数据
printf("ID: %s, Books: %s, Category: %s, User: %s, Sale: %s, Sort: %s, Brands: %s\n",
row[0], row[1], row[2], row[3], row[4], row[5], row[6]);
}
mysql_free_result(res);//用于释放查询结果集的内存
}
}
// 更新数据函数
void UpdateData(MYSQL* mysql, int id, const char* books, const char* category, const char* user, int sale, const char* sort, const char* brands) {
char query[256];
// 使用snprintf安全地构造SQL更新语句
snprintf(query, sizeof(query), "UPDATE tb_books SET books = '%s', category = '%s', user = '%s', sale = %d, sort = '%s', brands = '%s' WHERE id = %d",
books, category, user, sale, sort, brands, id);
//更新
if (mysql_query(mysql, query)) {
printf("Update failed: %s\n", mysql_error(mysql));
}
else {
printf("Update successful!\n");
}
}
// 删除数据函数
void DeleteData(MYSQL* mysql, int id) {
char query[256];
snprintf(query, sizeof(query), "DELETE FROM tb_books WHERE id = %d", id);
if (mysql_query(mysql, query)) {
printf("Delete failed: %s\n", mysql_error(mysql));
}
else {
printf("Delete successful!\n");
}
}
// 主函数
int main() {
MYSQL mysql;// 声明MYSQL结构体变量用于数据库操作
if (ConnectDatabase(&mysql)) {// 尝试连接数据库
// 插入数据示例
InsertData(&mysql, "张宇超自传", "人文科学类", "newuser", 10, "New Sort", "New Brands");
// 查询数据
printf("Data after insertion:\n");
SelectData(&mysql);
// 更新数据示例
UpdateData(&mysql, 1, "更新后的Book", "更新后的Category", "updateduser", 20, "更新后的Sort", "更新后的Brands");
// 再次查询数据以查看更新结果
printf("Data after update:\n");
SelectData(&mysql);
// 删除数据示例
DeleteData(&mysql, 1);
// 最后查询数据以查看删除结果
printf("Data after deletion:\n");
SelectData(&mysql);
// 断开连接
DisconnectDatabase(&mysql);
}
system("pause");
return 0;
}
结果如下:
也可以看看cmd命令行里面的