嵌入式数据库-SQLite的基本使用

这篇文章对比了SQLite和MySQL两种数据库系统,SQLite是一个轻量级的嵌入式数据库,无需服务器,适合小型应用,而MySQL是传统的服务器-客户端模式,适合大型数据库。SQLite优点包括易于设置、使用标准SQL,但扩展性和安全性较弱;MySQL则提供丰富的功能、安全性和扩展性,但需要更多技术知识来设置。文章还介绍了SQLite在LinuxUbuntu系统上的安装与基本使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 本项目以orange pi zero 2为例,开发板运行Linux(ubuntu)系统

与传统数据库的区别(MySql)

SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作
为应用程序的一部分运行。
MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。
SQLite 的优点
SQLite 的缺点
MySQL 的优点
MySQL 的缺点
基于文件,易于设置
和使用
适合基础开发和测试
轻松携带
使用标准 SQL 语法进
行微小更改
使用方便
缺乏用户管理和 安全功能
不容易扩展
不适合大数据库
无法定制
使用方便
提供了许多与数据库相 关的功能
良好的安全功能
易于扩展,适用于大型 数据库
提供良好的速度和性能
提供良好的用户管理和 多种访问控制
需要一些技术专业知
识来设置
与传统 SQL 相比,语
法略有不同

        

基于嵌入式的数据库主要有: SQLite Firebird Berkeley DB eXtremeDB
Firebird 是关系型数据库,功能强大,支持存储过程, SQL 兼容等
SQLite 关系型数据库,体积小,支持 ACID 事务
Berkeley DB 并没有数据库服务器的概念,他的程序直接链接到应用程序中
eXtremeDB 是内存数据库,运行效率高

SQLite安装部署(SQLite3)

方式1:

        sudo apt-get -y install sqlite (可能不是安装sqlite3)

 方式2:

        登录:https://www.sqlite.org/download.html

 

 

1. 把下载的文件sqlite-autoconf-xx.tar.gz上传到开发板
2. tar xvf sqlite-autoconf-xx.tar.gz 解压
3. cd sqlite-autoconf-xx 进入文件夹
4. ./configure --prefix=/usr/local 配置安装路径在/usr/local
5. make 编译   //需要时间
6. sudo make install 安装

 

完成后直接在终端输入命令:sqlite3

 

SQLite3命令基本用法(增、删、改、查)

创建数据库

方式1:

  1.  sqlite3 进入数据库
  2. .open test.db
  3. .quit

退出可在当前路径查看.db文件

方式2:

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

创建表格

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

插入一条记录

insert into stu values(18130106,'huang',99);
insert into stu values(18130101,"gang",100); ''""都行
insert into stu(name,score) values("huanggang",98); 插入部分字段内容

查看数据库的记录

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

删除一条记录

delete from stu where id = 18130101;

更改一条记录

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

删除一张表

drop table stu;

增加一列

alter table stu add column sex char;
更多命令使用可查看 SQLite Update 语句 | 菜鸟教程

SQLite编程操作(c语言)

打开/创建数据库

如果数据库存在就打开,否则创建

相关API

sqlite3_open(const char *filename, sqlite3 **ppDb)
打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象
执行成功返回0 其他为错误码


sqlite3_close(sqlite3*) 
关闭数据库,所有与连接相关的语句都应在连接关闭之前完成。
如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。


const char *sqlite3_errmsg(sqlite3*)
sqlite3_errcode() 通常用来获取最近调用的API接口返回的错误代码

错误码返回参照表

示例代码

 

#include <stdio.h>
#include <sqlite3.h>

int main(int argc,char **argv)
{
    sqlite3 *db; //创建sqlite的对象
    int ret;
    if(argc < 2)
    {
        printf("Usage :%s *.db\n",argv[0]);
        return -1;
    }
                    //数据库名 数据库对象
    ret = sqlite3_open(argv[1],&db);
    if(ret == 0){
        printf("open %s success!\n",argv[1]);
    }
    else{
        printf("error:%s\n",sqlite3_errmsg(db));//获取错误信息
        return -1;
    }

    sqlite3_close(db);//关闭数据库
    printf("quit!\n");


    return 0;
}

 

创建表、添加数据、查询数据

相关API
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

执行成功返回0 其他为错误码

参数介绍:sqlite3*为参数的对象
                       sql,为sql执行语句
                        sqlite_callback参考函数如下:
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
参数介绍:void *arg:是sqlite3_exec函数的第四个参数 
                        column_size:数据库的字段数
                        column_value[]:列的值 
                        column_name:字段名字

注意事项:callback一定要return 0,只有这样函数才能根据数据有多少条才能执行多少次 

示例代码

#include <stdio.h>
#include <sqlite3.h>
                //exec的第4个参数,字段个数,字段的值(列的值),字段名
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;//一定要return 0,回调函数会根据数据有多少条执行多少次,否则只执行一次
}

int main(int argc,char **argv)
{
    sqlite3 *db; //数据库对象
    char *errmsg = NULL;
    int ret; //存放错误码
    if(argc < 2)
    {
        printf("Usage :%s *.db\n",argv[0]);
        return -1;
    }
    ret = sqlite3_open(argv[1],&db); //打开/创建数据库
    if(ret == 0){
        printf("open %s success!\n",argv[1]);
    }
    else{
        printf("error:%s\n",sqlite3_errmsg(db));
        return -1;
    }

//  sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char**errmsg);
//创建表,表名为book
  ret = sqlite3_exec(db,"create table book(num varchar,bookname varchar);",callback,"sql data:",&errmsg);
    if(ret != SQLITE_OK) {
        printf("error:%s\n",errmsg);
    }

//往表book添加数据
    ret = sqlite3_exec(db,"insert into  book values ('001','English source');",callback,"sql data:",&errmsg);
    if(ret!=SQLITE_OK){
        printf("error:%s\n",errmsg);
    }

//查询表book的所有数据
    ret = sqlite3_exec(db,"select *from book;",callback,"sql data:",&errmsg);
    if(ret!=SQLITE_OK){
        printf("error:%s\n",errmsg);
    }
    sqlite3_close(db);
    printf("quit!\n");


    return 0;
}

 

 其他的命令只需改变sql命令即可

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值