一、数据库基础与C语言环境搭建

各位同学,咱们今天聊点实在的。很多人一听到「数据库」三个字,脑子里就浮现出Oracle、MySQL那些庞然大物,觉得离C语言很远。其实不然。我个人习惯把数据库看作一个「有组织的文件柜」——你往里面存数据,按规矩取出来,就这么简单。而SQLite,就是这个文件柜的轻量级实现,特别适合咱们嵌入式C语言的场景。

1.1 关系型数据库到底是个啥?

说白了,关系型数据库就是一张张表格的集合。你想想看,Excel表格你总用过吧?行是记录,列是字段,表之间通过某个共同字段关联起来——这就是「关系」二字的由来。

我在项目中遇到过不少新手,上来就问:「为什么不用文本文件存数据?」嗯,文本文件当然可以,但你要做查询、排序、多表关联的时候,自己写代码实现这些功能,那工作量可就大了去了。数据库帮你把这些脏活累活都干了,你只需要告诉它「我要什么」,不用管「怎么找」。

核心概念速览:
  • 表(Table):数据的容器,类似Excel的sheet
  • 行(Row):一条完整的记录
  • 列(Column):记录的某个属性
  • 主键(Primary Key):唯一标识一行数据的字段
  • 外键(Foreign Key):关联其他表的字段

1.2 SQLite——嵌入式数据库的瑞士军刀

SQLite有什么特别的?它不是一个独立的服务器进程,而是一个,直接链接到你的C程序中。你的程序调用SQLite的API,它就在本地文件上读写数据,不需要网络,不需要配置,连安装都省了。

我曾经在一个ARM Cortex-M4的板子上跑SQLite,整个库编译下来才600KB左右。你想想看,这点资源占用,在嵌入式领域简直是福音。而且它支持标准的SQL语法,你在MySQL上学的那套CRUD操作,在这里基本都能用。

特性 SQLite MySQL/PostgreSQL
部署方式 库文件,直接链接 独立服务进程
资源占用 几百KB 几百MB起步
配置复杂度 零配置 需要用户、权限、网络配置
适用场景 嵌入式、移动端、桌面小工具 高并发、大型Web应用
我的建议:如果你在做物联网设备、车载系统、或者任何不需要高并发的本地存储场景,优先考虑SQLite。别一上来就上重型数据库,杀鸡焉用牛刀。

1.3 C语言开发环境配置(MinGW / VS)

环境配置这块,我踩过不少坑。咱们分两个主流方案来讲。

方案一:MinGW(Windows上的GCC)

我个人习惯用MinGW,轻量、跨平台、跟Linux上的GCC体验一致。你下载安装后,记得把bin目录加到系统PATH里。验证方法很简单:打开命令行,输入gcc --version,能看到版本号就对了。

# 检查GCC是否安装成功
gcc --version

# 编译一个测试文件
gcc -o hello hello.c

方案二:Visual Studio

如果你更习惯IDE,VS的C/C++开发体验也很成熟。新建一个控制台项目,把SQLite的源文件拖进去,直接编译就行。不过要注意:VS默认使用MSVC编译器,有些C99特性支持得不太好,编译SQLite时可能需要加几个宏定义。

避坑指南:我曾经在VS2019上编译SQLite,报了一堆关于strncpy_s的警告。后来发现是SDL安全检查搞的鬼。在项目属性 -> C/C++ -> 命令行 里加上 /D _CRT_SECURE_NO_WARNINGS 就清净了。

1.4 SQLite库的编译与链接

SQLite的源码就一个sqlite3.c文件和对应的头文件sqlite3.h。你不需要什么复杂的构建系统,直接把它跟你的程序一起编译就行。

# 单文件编译(最简单的方式)
gcc -o myapp myapp.c sqlite3.c -lpthread -ldl

# 或者先编译成目标文件,再链接
gcc -c sqlite3.c -o sqlite3.o
gcc -c myapp.c -o myapp.o
gcc myapp.o sqlite3.o -o myapp -lpthread -ldl

注意后面的-lpthread -ldl,这是SQLite在多线程和动态加载时需要的系统库。如果你在Windows上用MinGW,可能还需要加-lws2_32。嗯,这里有个小技巧:你可以用pkg-config来管理这些链接参数,不过SQLite太轻量了,我一般直接手写。

验证链接是否成功:写一个最简单的程序,调用sqlite3_libversion()函数,打印出版本号。如果能输出类似"3.45.1"这样的字符串,说明库已经正确链接了。
#include <stdio.h>
#include "sqlite3.h"

int main() {
    printf("SQLite version: %s\n", sqlite3_libversion());
    return 0;
}

知识体系总览

下面这张图,把本章的核心脉络串起来了。你可以把它当作一张地图,后续学习时随时回来对照。

第一章:数据库基础与C语言环境搭建 关系型数据库概念 SQLite简介 C语言环境搭建 表、行、列 主键与外键 SQL查询语言 零配置 单文件存储 嵌入式API MinGW配置 Visual Studio 编译与链接 目标:能在C程序中调用SQLite API

好了,这一章的内容就到这里。环境搭好之后,下一章我们就可以真正动手写代码了——用C语言连接SQLite,执行第一条SQL语句。到时候你会发现,原来在C里操作数据库,跟玩似的。


公众号:蓝海资料掘金营,微信deep3321