【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;
}

问题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nebula嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值