当前位置:首页 > C > 正文

C语言数据库访问实战指南(从零开始掌握C语言连接MySQL与SQLite)

在嵌入式系统、高性能服务器或资源受限环境中,使用 C语言数据库访问 技术可以高效地与数据库交互。本教程将手把手教你如何用 C 语言连接并操作 MySQL 和 SQLite 数据库,即使你是编程小白也能轻松上手!

C语言数据库访问实战指南(从零开始掌握C语言连接MySQL与SQLite) C语言数据库访问 C语言连接MySQL 嵌入式数据库编程 C语言SQLite教程 第1张

为什么选择 C 语言进行数据库操作?

C 语言以其高效、轻量和接近硬件的特性,在需要极致性能的场景中广受欢迎。无论是开发物联网设备还是高性能后端服务,C语言连接MySQL 或 SQLite 都能提供稳定可靠的数据库支持。

准备工作

在开始之前,请确保你的开发环境已安装以下内容:

  • GCC 编译器(Linux/macOS)或 MinGW(Windows)
  • MySQL 客户端库(libmysqlclient)或 SQLite 开发库
  • 一个文本编辑器(如 VS Code、Sublime Text)

一、使用 C 语言连接 SQLite(轻量级嵌入式数据库)

SQLite 是一个无需独立服务器进程的嵌入式数据库,非常适合小型项目或资源受限环境。下面是一个完整的 C语言SQLite教程 示例:

#include <stdio.h>#include <sqlite3.h>// 回调函数:用于处理查询结果static int callback(void *data, int argc, char **argv, char **azColName) {    for (int i = 0; i < argc; i++) {        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");    }    printf("\n");    return 0;}int main() {    sqlite3 *db;    char *err_msg = 0;    int rc;    // 打开数据库(如果不存在则创建)    rc = sqlite3_open("test.db", &db);    if (rc != SQLITE_OK) {        fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));        return 1;    }    printf("成功打开数据库!\n");    // 创建表    const char *sql_create = "CREATE TABLE IF NOT EXISTS users ("                             "id INTEGER PRIMARY KEY, "                             "name TEXT NOT NULL, "                             "age INTEGER);";    rc = sqlite3_exec(db, sql_create, 0, 0, &err_msg);    if (rc != SQLITE_OK) {        fprintf(stderr, "SQL 错误: %s\n", err_msg);        sqlite3_free(err_msg);    } else {        printf("表创建成功!\n");    }    // 插入数据    const char *sql_insert = "INSERT INTO users (name, age) VALUES ('张三', 25);";    rc = sqlite3_exec(db, sql_insert, 0, 0, &err_msg);    if (rc != SQLITE_OK) {        fprintf(stderr, "插入失败: %s\n", err_msg);        sqlite3_free(err_msg);    }    // 查询数据    const char *sql_select = "SELECT * FROM users;";    rc = sqlite3_exec(db, sql_select, callback, 0, &err_msg);    if (rc != SQLITE_OK) {        fprintf(stderr, "查询失败: %s\n", err_msg);        sqlite3_free(err_msg);    }    // 关闭数据库    sqlite3_close(db);    return 0;}

编译命令(需先安装 sqlite3-dev):

gcc -o sqlite_example sqlite_example.c -lsqlite3

二、使用 C 语言连接 MySQL(企业级关系型数据库)

对于需要多用户并发访问的场景,C语言连接MySQL 是更合适的选择。以下是连接 MySQL 的基本示例:

#include <stdio.h>#include <mysql/mysql.h>int main() {    MYSQL *conn;    MYSQL_RES *res;    MYSQL_ROW row;    char *server = "localhost";    char *user = "your_username";    char *password = "your_password";    char *database = "test_db";    // 初始化连接    conn = mysql_init(NULL);    // 连接数据库    if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) {        fprintf(stderr, "连接失败: %s\n", mysql_error(conn));        return 1;    }    printf("成功连接到 MySQL 数据库!\n");    // 执行查询    if (mysql_query(conn, "SELECT * FROM users")) {        fprintf(stderr, "查询失败: %s\n", mysql_error(conn));        return 1;    }    res = mysql_store_result(conn);    // 输出结果    while ((row = mysql_fetch_row(res)) != NULL) {        printf("ID: %s, Name: %s, Age: %s\n", row[0], row[1], row[2]);    }    // 释放资源    mysql_free_result(res);    mysql_close(conn);    return 0;}

编译命令(需先安装 libmysqlclient-dev):

gcc -o mysql_example mysql_example.c -lmysqlclient

常见问题与最佳实践

  • 内存管理:务必在程序结束前释放数据库连接和结果集,避免内存泄漏。
  • 错误处理:每次数据库操作后都应检查返回值,确保程序健壮性。
  • SQL 注入防护:使用参数化查询(如 sqlite3_bind_* 系列函数)防止注入攻击。
  • 跨平台兼容:在 Windows 上使用 MinGW 或 Visual Studio 时,注意链接正确的库文件。

结语

通过本教程,你已经掌握了 C语言数据库访问 的两种主流方式:轻量级的 SQLite 和功能强大的 MySQL。无论你是开发 嵌入式数据库编程 项目,还是构建高性能后端服务,这些技能都将为你打下坚实基础。

动手试试吧!修改示例代码,添加自己的业务逻辑,你会发现 C 语言与数据库的结合既高效又灵活。