C 连接数据库查询增删改
使用 C 语言连接数据库并进行查询、增加、删除和修改操作,需要借助相应的数据库客户端库,本文将以 MySQL 为例,介绍如何使用 C 语言进行这些操作。
1. 准备工作
在开始编程之前,需要确保系统已经安装了 MySQL 数据库,并安装 MySQL C API(MySQL Connector/C),以下是一些必要的步骤:
安装 MySQL: 请参考 MySQL 官方文档进行安装。
安装 MySQL Connector/C: 可以通过包管理器或从 [MySQL 官方网站](https://dev.mysql.com/downloads/connector/c/)下载源码进行编译安装。
2. 编写代码
2.1 引入头文件
我们需要包含 MySQL Connector/C 的头文件:
#include <mysql/mysql.h> #include <stdio.h> #include <stdlib.h>
2.2 初始化连接
我们创建一个函数来初始化数据库连接:
MYSQL* init_connection(const char* host, const char* user, const char* password, const char* database) { MYSQL *conn = mysql_init(NULL); if (conn == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); exit(EXIT_FAILURE); } if (mysql_real_connect(conn, host, user, password, database, 0, NULL, 0) == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); mysql_close(conn); exit(EXIT_FAILURE); } return conn; }
2.3 执行查询
下面是一个执行 SQL 查询的函数:
void execute_query(MYSQL *conn, const char* query) { if (mysql_query(conn, query)) { fprintf(stderr, "%s ", mysql_error(conn)); exit(EXIT_FAILURE); } MYSQL_RES *result = mysql_store_result(conn); if (result == NULL) { fprintf(stderr, "%s ", mysql_error(conn)); exit(EXIT_FAILURE); } // 处理结果集 MYSQL_ROW row; while ((row = mysql_fetch_row(result))) { for (int i = 0; i < mysql_num_fields(result); i++) { printf("%s ", row[i] ? row[i] : "NULL"); } printf(" "); } mysql_free_result(result); }
2.4 插入数据
这是一个插入数据的示例函数:
void insert_data(MYSQL *conn, const char* query) { if (mysql_query(conn, query)) { fprintf(stderr, "%s ", mysql_error(conn)); exit(EXIT_FAILURE); } else { printf("Data inserted successfully. "); } }
2.5 更新数据
更新数据的示例函数如下:
void update_data(MYSQL *conn, const char* query) { if (mysql_query(conn, query)) { fprintf(stderr, "%s ", mysql_error(conn)); exit(EXIT_FAILURE); } else { printf("Data updated successfully. "); } }
2.6 删除数据
删除数据的示例函数如下:
void delete_data(MYSQL *conn, const char* query) { if (mysql_query(conn, query)) { fprintf(stderr, "%s ", mysql_error(conn)); exit(EXIT_FAILURE); } else { printf("Data deleted successfully. "); } }
2.7 关闭连接
我们需要一个函数来关闭数据库连接:
void close_connection(MYSQL *conn) { mysql_close(conn); }
3. 主函数示例
下面是一个完整的示例程序,展示了如何使用上述函数进行数据库操作:
int main() { // 初始化连接 MYSQL *conn = init_connection("localhost", "root", "password", "testdb"); // 执行查询 execute_query(conn, "SELECT * FROM users"); // 插入数据 insert_data(conn, "INSERT INTO users (name, age) VALUES ('Alice', 30)"); // 更新数据 update_data(conn, "UPDATE users SET age = 31 WHERE name = 'Alice'"); // 删除数据 delete_data(conn, "DELETE FROM users WHERE name = 'Alice'"); // 关闭连接 close_connection(conn); return 0; }
相关问题与解答
问题 1:如何在 C 语言中使用事务?
解答:在 C 语言中使用事务,可以在执行一系列 SQL 语句前后分别调用mysql_autocommit
函数来开启和关闭自动提交模式。
mysql_autocommit(conn, 0); // 关闭自动提交模式,开始事务 execute_query(conn, "UPDATE accounts SET balance = balance 100 WHERE id = 1"); execute_query(conn, "UPDATE accounts SET balance = balance + 100 WHERE id = 2"); mysql_commit(conn); // 提交事务
如果需要回滚事务,可以调用mysql_rollback
:
mysql_rollback(conn); // 回滚事务
问题 2:如何处理二进制数据?
解答:对于二进制数据,可以使用mysql_real_escape_string
函数对字符串进行转义,然后使用mysql_escape_string
将字符串转换为适合存储的格式。
const char *binary_data = "\x01\x02\x03"; size_t length = strlen(binary_data); char escaped[length * 2 + 1]; // 预留足够空间以容纳转义后的字符串 mysql_real_escape_string(conn, escaped, binary_data, length); // 转义字符串 insert_data(conn, "INSERT INTO binary_table (data) VALUES ('" escaped "')"); // 插入数据
以上就是关于“c连接数据库查询增删改”的问题,朋友们可以点击主页了解更多内容,希望可以够帮助大家!
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/2046.html<