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

【Linux基础】sqlite数据库

一、sqlite介绍

SQLite 是一款轻量级、易用的嵌入式数据库,主要用于设备端的数据管理。它没有服务器架构,直接嵌入到应用程序中运行,因此被称为“无服务器数据库”。与传统服务器型数据库(如 MySQL)相比,SQLite 更适合单点设备的数据管理。

数据库类型

特点

SQLite

嵌入式、轻量化、支持 ACID 事务,适合单点设备。

MySQL

服务器型、支持多客户端、复杂架构,适合分布式系统。

Firebird

功能强大,支持存储过程和 SQL 兼容性。

Berkeley DB

无服务器概念,直接链接到应用程序中。

eXtremeDB

内存数据库,运行效率高,适合实时性要求高的场景。

二、sqlite安装

官网:SQLite Download Page

下载带有配置脚本的版本(如 sqlite-autoconf-3390000.tar.gz)。

# 1. 上传文件到开发板
# 2. 解压文件
tar xvf sqlite-autoconf-3390000.tar.gz# 3. 进入解压后的文件夹
cd sqlite-autoconf-3390000# 4. 配置安装路径
./configure --prefix=/usr/local# 5. 编译(可能需要较长时间)
make# 6. 安装
sudo make install

三、sqlite用法

3.1 创建数据库

方式一:

1. sqlite3 进入数据库
2. .open test.db
3. .quit
数据库退出后在命令当前路径创建数据库test.db

方式二:

sqlite3 test.db //在命令运行当前窗口创建数据库test.db
在数据库命令下
.databases 列出当前打开的数据库
.quit 退出

3.2 创建一张表格

create table stu2(id Integer,name char,score Integer);

3.3 插入一条记录

insert into stu values(18130106,'huang',99);
insert into stu2 values(18130101,"gang",100); 使用单引号或双引号均可
insert into stu(name,score) values("huanggang",98); 插入部分字段内容

3.4 查看数据库的记录

select * from stu; //查询所有字段的结果
select name,score from stu; //查询数据库中部分字段的内容

3.5 删除一条记录

delete from stu where id = 18130101;/* 如果是char就要带双引号 */

3.6 更改一条记录

update stu set name = 'huangg' where id = 18130106;

3.7 删除一张表

drop table stu;

3.8 增加一列

alter table stu add column sex char;

3.9 查看当前数据库的表

.tables

四、基于C语言操作sqlite

编译时需链接 SQLite3 库:

gcc example.c -o example -lsqlite3

4.1 打开/关闭数据库

4.1.1 打开数据库

原型:

sqlite3_open(const char *filename, sqlite3 **ppDb);

作用:

打开或创建一个 SQLite 数据库文件,返回一个数据库连接对象。

4.1.2 关闭数据库

原型:

sqlite3_close(sqlite3*);

作用:

关闭数据库连接。如果仍有未完成的查询,会返回 SQLITE_BUSY 错误。

4.1.3 获取错误代码

原型:

const char *sqlite3_errmsg(sqlite3*);

作用:

获取最近调用的API接口返回的错误代码。

4.1.4 执行qlite语句

原型:

int sqlite3_exec(sqlite3 *db,              // 数据库连接对象const char *sql,          // SQL 语句int (*callback)(void*, int, char**, char**),  // 回调函数void *data,               // 传递给回调函数的参数char **errmsg             // 错误信息
);

作用:

解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。

参数:

  • db:打开的数据库对象。
  • sqlite_callback:回调函数。
  • data:作为回调函数的第一个参数。
  • errmsg:将被返回用来获取程序生成的任何错误。

int callback(void *arg, int column_size, char *column_value[], char  *column_name[]) 

参数分析:

  • void *arg:用户自定义的参数,可以在调用sqlite3_exec时传递给回调函数。
  • int column_size:查询结果中每行的列数。
  • char *column_value[]:一个指向字符串数组的指针,包含每一列的值。如果某列的值为NULL,则对应的数组元素为NULL。
  • char *column_name[]:一个指向字符串数组的指针,包含每一列的名称。
  • 返回值:回调函数的返回值决定了查询是否继续执行:
    • 返回0:继续执行查询。
    • 返回非0值:停止查询并返回错误。

例子:

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{int i;printf("arg=%s\n", (char *)arg);for (i = 0; i < column_size; i++){printf("%s = %s\n", column_name[i], column_value[i]);}printf("=======================\n");return 0; // 必须返回0,这样数据库中有多少条数据,这个回调函数就会被调用多少次
}int main(int argc, char *argv[])
{sqlite3 *db;char *errmeg = NULL;int rc;rc = sqlite3_open("wlc.db", &db);if (rc){printf("can`t open database:%s\n", sqlite3_errmsg(db));exit(0);}else{printf("open %s success!\n", "wlc.db");}sqlite3_exec(db, "select * from stu;", \callback, "content of sql:", &errmeg);sqlite3_close(db);return 0;
}

问题

已经正确安装库之后还是找不到库就手动更新一下共享库缓存

相关文章:

  • 观察者模式与发布订阅模式:解耦与通信的艺术
  • SpringBoot 动态加载 Jar 包
  • 【c语言】深入理解指针2
  • Python 获取淘宝券后价接口的详细指南
  • 2025年机动车检测站授权签字人考试真题及答案
  • 【C++】map和set
  • Windows11-24h2的任务栏时间显示秒 笔记250417
  • 更强的视觉 AI!更智能的多模态助手!Qwen2.5-VL-32B-Instruct-AWQ 来袭
  • 【OSG学习笔记】Day 3: 加载你的第一个3D模型
  • Pytest 的钩子函数 (Hook Functions):定制你的测试流程 (Pytest 系列之五)
  • 关于webpack的知识点
  • 67. 二进制求和
  • MongoServerError: Authentication failed.处理办法
  • 利用 Java 爬虫按关键字搜索淘宝商品
  • ServletContextListener 的用法笔记250417
  • 第十七届“华中杯”B 题校园共享单车的调度与维护问题分析
  • 第九章:强化学习(RL)赋能 AI Agents:潜力、挑战与问题建模
  • 【MCP】第一篇:MCP协议深度解析——大模型时代的“神经连接层“架构揭秘
  • 极狐GitLab 安全文件管理功能介绍
  • C++纯虚函数
  • 受天气等影响SC8041航班三次备降延误超12小时,山航致歉
  • 滨江集团:一季度营收225.07亿元,净利润9.75亿元
  • 俄罗斯纪念卫国战争胜利80周年阅兵式首次彩排在莫斯科举行
  • 这座“蚌埠住了”的城市不仅会接流量,也在努力成为文旅实力派
  • 丁俊晖连续7年止步世锦赛16强,中国军团到了接棒的时候
  • 解放日报头版:人民城市共建共享展新卷