嵌入式数据库-SQLite

19 篇文章 6 订阅
7 篇文章 1 订阅

SQLite简介

轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备,更加复杂

SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作 为应用程序的一部分运行。
MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。

基于嵌入式的数据库主要有:SQLite,Firebird,Berkeley DB,eXtremeDB

Firebird 是关系型数据库,功能强大,支持存储过程,SQL兼容等

SQLite 关系型数据库,体积小,支持ACID事务 Berkeley DB 并没有数据库服务器的概念,他的程序直接链接到应用程序中

eXtremeDB 是内存数据库,运行效率高

SQLite数据库安装

下载地址

安装方式一:

sudo apt-get -y install sqlite

安装方式二:

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

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

SQLite的命令用法

创建一个数据库

方法一

1、sqlite3 //进入数据库
2、.open test.db //当数据库没有时创建数据库
3、.quit //退出数据库命令行

方法二

1、sqlite3 mydatabase.db //进入数据库命令行时顺带创建或打开

2、.databases //列出当前打开的数据库

3、.quit //退出

tip:

当sqlite3输入一条错误命令后怎么退出来,.exit和.quit都不起作用
在新的一行输入分号
;(回车)
然后sqlite会提示一段错误信息 然后就好了

创建一张数据表

create table stu(id Integer,name char,score integer);
创建了一张叫做stu的数据表,里面包含了id,名字和成绩等信息

插入数据

i nsert into stu values(001,"zahng",11);

insert into stu values(002,'aaaaa',222); //‘’和“”都可以
insert into stu(id,score) values(004,99); //只添加Id和分数

查找数据表内的数据

select *from stu; //查询表内所有内容

select name,id from stu; //查询表内名字、id

.tables //可以查看打开的数据库里的表格

出现异常

CTRL+Z退出

删除一条数据

delete from stu where id=1; //删除id=1的数据

删除一张表

drop table stu2; //删除表stu2

更新表中数据

update stu set name='a' where id=4; //更新id=4的数据的name更改为a

update stu set sex='f' where id<10; //更新stu表中id<10的sex属性为f

数据表增加一列属性

alter table stu add column sex char; //数据表增加一列sex的属性

SQLite的编程实战

打开/创建数据库API

#include <sqlite3.h>

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

函数作用:打开/创建数据库

filename:路径(包含文件名)

ppDb:sqlite3类型的二级指针,成功调用sqlite3_open()函数,ppDb将会指向数据库的地址

返回值:成功返回0(SQLITE_OK),失败返回错误编码


int sqlite3_close(sqlite3 *pDb);

函数作用:关闭数据库

pDb:sqlite3类型的指针,pDb将会指向数据库

返回值:成功返回0(SQLITE_OK),失败返回错误编码


const char *sqlite3_errmsg(qlite3 *pDb);
函数作用:用来获取最近调用的数据库API接口返回的错误信息

pDb:sqlite3类型的指针,pDb将会指向数据库

返回值:错误信息(字符串)


int sqlite3_errcode(qlite3 *pDb);

函数作用:用来获取最近调用的数据库API接口返回的错误代码

pDb:sqlite3类型的指针,pDb将会指向数据库

返回值:错误代码

sqlite3_demo1.c

#include <stdio.h>
#include <sqlite3.h>
 
int main(int argc,char **argv)
{
        sqlite3 *db;
        int ret;
 
        if(argc !=2){
                printf("error:%s xxx.db\n",argv[0]);
                return -1;
        }
 
        if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
                printf("open %s success! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
        }else{
                printf("open %s fail! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
                return -2;
        }
 
        if((ret = sqlite3_close(db)) == SQLITE_OK){
                printf("close %s success\n",argv[1]);
        }else{
                printf("close %s fail,errcode:%d\n",argv[1],sqlite3_errcode(db));
        }
        return 0;
}

执行命令语句API

#include <sqlite3.h>

int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
函数作用

sqlite3:sqlite3类型的指针,指向数据库

sql:sql语句

sqlite_callback:回调函数

data:传递给回调函数的第一个形参

errmsg:char类型二级指针,执行sqlite3_exec()返回错误信息

返回值:成功返回0,失败返回错误代码

回调函数原型:
int callback(void *arg, int column_size, char *column_value[],
char *column_name[]);
函数作用:

arg:sqlite3_exec()函数传递的第四个参数

column_size:数据库的字段数

column_value[]:指针数组,列值

column_name[]:指针数组,字段名字

返回值:返回值必须是0,否则回调函数不会再次被执行

sqlite3_exec_demo1.c

#include <stdio.h>
#include <sqlite3.h>
 
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{
        int i;
        printf("%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;
}
 
 
 
int main(int argc,char **argv)
{
        sqlite3 *db;
        int ret;
        char *errmsg;
 
        if(argc !=2){
                printf("error:%s xxx.db\n",argv[0]);
                return -1;
        }
 
        if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
                printf("open %s success! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
        }else{
                printf("open %s fail! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
                return -2;
        }
 
 
 
        //sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
        ret = sqlite3_exec(db,"select *from stu;",callback,"msg from exec",&errmsg);
 
        printf("errmsg is %s,ret is %d\n",errmsg,ret);
 
 
 
        if((ret = sqlite3_close(db)) == SQLITE_OK){
                printf("close %s success\n",argv[1]);
        }else{
                printf("close %s fail,errcode:%d\n",argv[1],sqlite3_errcode(db));
        }
        return 0;
}

sqlite3_exec_demo2.c

#include <stdio.h>
#include <sqlite3.h>
#include <string.h>
 
 
 
 
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{
        int i;
        printf("%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;
}
 
 
 
int main(int argc,char **argv)
{
        sqlite3 *db;
        int ret;
        char *errmsg;
 
        if(argc !=2){
                printf("error:%s xxx.db\n",argv[0]);
                return -1;
        }
 
        if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){
                printf("open %s success! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
        }else{
                printf("open %s fail! ret is %d,errmsg:%s,errcode:%d\n",argv[1],ret,sqlite3_errmsg(db),sqlite3_errcode(db));
                return -2;
        }
 
 
 
        //sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg);
        //ret = sqlite3_exec(db,"select *from stu;",callback,"msg from exec",&errmsg);
 
 
 
        ret = sqlite3_exec(db,"create table Class01(id Integer,name char,score Integer)",callback,"msg from exec",&errmsg);
        if(ret !=SQLITE_OK){
                if(strstr(errmsg,"already exists")!=NULL){
                        printf("table already exists!\n");
                }else{
                        printf("other error!\n");
                }
        }
        //ret = sqlite3_exec(db,"insert into Class01 values(100,'pengkaifan',150);",callback,"msg from exec",&errmsg);
        //printf("insert errmsg is %s,ret is %d\n",errmsg,ret);
 
        //ret = sqlite3_exec(db,"update Class01 set name='pp' where id=100;",callback,"msg from exec",&errmsg);
        //printf("updata errmsg is %s,ret is %d\n",errmsg,ret);
 
 
        ret = sqlite3_exec(db,"delete from Class01 where id=100;",callback,"msg from exec",&errmsg);
        printf("detele errmsg is %s,ret is %d\n",errmsg,ret);
 
        ret = sqlite3_exec(db,"select *from Class01;",callback,"msg from exec",&errmsg);
        printf("select errmsg is %s,ret is %d\n",errmsg,ret);
 
        if((ret = sqlite3_close(db)) == SQLITE_OK){
                printf("close %s success\n",argv[1]);
        }else{
                printf("close %s fail,errcode:%d\n",argv[1],sqlite3_errcode(db));
        }
        return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值