基础环境说明:本机使用Windows 11 家庭版本搭载 Ubuntu 22.04.4 LTS 子系统。进行sqlite3 数据库源码编译和库函数生成。
sqlite3的简介
什么是SQLite3?
sqlite3是一个进程内的库,实现了自给自足、无服务器、零配置、事务性的SQL数据库引擎。它是一个增长最快的数据库引擎。它不是一个独立的进程,可以按应用程序需求进行静态或动态连接,SQLite直接访问其存储文件。
为什么要使用sqlite
不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite 不需要配置,这意味着不需要安装或管理。
一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
SQLite 是自给自足的,这意味着不需要任何外部的依赖。
SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)Windows(Win32, WinCE, WinRT)中运行。
Ubuntu编译安装sqlite3
第一步:访问sqlite3 官方网站,下载自动编译源文件。https://www.sqlite.org/
下载 sqlite-autoconf-3460000.tar.gz 存放在Ubuntu 系统的位置路径地址:/mnt/e/github_source_code/sqlite-autoconf-3460000.tar.gz
第二步:解压、编译和库函数拷贝系统库
解压sqlite-autoconf-3460000.tar.gz 并切换至对应的文件夹目录,相关指令如下:
tar -zxvf sqlite-autoconf-3460000.tar.gz
cd sqlite-autoconf-3460000/
创建 sqlite_libaray 文件夹执行,用于指定sqlite3库文件、头文件和可行性命令.
mkdir sqlite_library
执行编译:
1.首先需要切换回sqlite3 源码文件夹:
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code$ cd sqlite-autoconf-3460000/
./configure --prefix=/mnt/e/github_source_code/sqlite_library(--prefix用于指定sqlite库文件、头文件和可行性命令的安装路径)
2.
make //进行编译
3.
make install (把sqlite安装到--prefix指定的目录下)
顺利执行后,在/mnt/e/github_source_code/sqlite_library目录下会出现四个文件夹,即:
- bin 存放sqlite命令文件
- include 存放sqlite的头文件
- lib 存放sqlite库文件,包括静态库和动态库
- share 存放帮助文件等辅助性的文档
第三步:移植
Linux中存放系统库文件的位置usr/lib、usr/include;
当要使用第三方库函数时,将.h和.so .a文件等加入usr/include、usr/lib即可;
执行如下命令:
将sqlite_library 中lib 文件夹中已libsqlite3* 开头的.h和.so 文件拷贝至/usr/lib 文件夹中。
wz2012@LAPTOP-8R0KHL88://$ cd /mnt/e/github_source_code/sqlite_library/
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library$ cd lib
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library/lib$sudo cp libsqlite3* /usr/lib
将sqlite_library 中lib 文件夹中已libsqlite3* 开头的.h和.so 文件拷贝至/usr/include 文件夹中。
wz2012@LAPTOP-8R0KHL88://$ cd /mnt/e/github_source_code/sqlite_library/
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library$ cd include
wz2012@LAPTOP-8R0KHL88:/mnt/e/github_source_code/sqlite_library/include$ sudo cp * /usr/include/
第四步:在Ubuntu 系统中使用C 语言连接sqlite3 数据库/验证
#include <stdio.h>
#include <sqlite3.h>
int main(int argc, char *argv[])
{
sqlite3 *db;
char *err_msg = 0;
// 打开数据库连接
int rc = sqlite3_open("test.db", &db);
if (rc) {
fprintf(stderr, "无法打开数据库: %s\n", sqlite3_errmsg(db));
return 1;
} else {
fprintf(stderr, "成功打开数据库\n");
}
// 创建一个表
char *sql = "CREATE TABLE IF NOT EXISTS Cars(Id INT, Name TEXT, Price INT)";
rc = sqlite3_exec(db, sql, 0, 0, &err_msg);
if (rc != SQLITE_OK ) {
fprintf(stderr, "SQL 错误: %s\n", err_msg);
sqlite3_free(err_msg);
} else {
fprintf(stdout, "成功创建表\n");
}
// 关闭数据库连接
sqlite3_close(db);
return 0;
}
编译命令方式:
第一种:默认链接动态库
gcc sqlite3_demo1.c -o sqlite3_demo1 -lsqlite3
第二种:指定链接动态库
gcc sqlite3_demo1.c -o sqlite3_demo1 -static -lsqlite3 -lpthread -ldl
控制台结果输出:
wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code/sqlite3数据库使用$ gcc sqlite3_demo1.c -o sqlite3_demo1 -lsqlite3
wz2012@LAPTOP-8R0KHL88:/mnt/e/ubuntu_code/sqlite3数据库使用$ ./sqlite3_demo1
成功打开数据库
成功创建表