嵌入式常用数据库sqllite3

sqllite简介

                SQLite是一个无服务器的数据库,是自包含的,也称为嵌入式数据库,这意味着数据库引擎作为应用程序的一部分运行。它是轻量化,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据库用于管理多端设备,更加复杂。

                基于嵌入式的数据库主要有:SQLite,Firebird,Berkeley DB,eXtremeDB。
                Firebird:关系型数据库,功能强大,支持存储过程,SQL兼容等SQLite关系型数据库,

                体积小,支持ACID事务
                BerkeleyDB:并没有数据库服务器的概念,他的程序直接链接到应用程序中
                eXtremeDB:内存数据库,运行效率高

sqlite与msql对比

                

sqlite优点sqlite缺点mysql优点mysql

1.基于文件,易于设和使用

2.适合基础开发和测试

3.轻松携带

4.使用标准SQL语法进行微小更改使用方便

1.缺乏用户管理和安全功能

2.不容易扩展

3.不适合大数据库

4.无法定制

1.包含许多数据库相关的功能

2.良好的安全功能

3.易于扩展,适用于大型数据库

提供良好的速度和性能

4.提供良好的用户管理和

5.多种访问控制

1.需要技术专业知识来设置

2.传统SQL

相比,语法略有不同

sqllite的C接口          

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

                功能:打开(创建)数据库

                参数:

        ​​​​​​​        ​​​​​​​       filename:打开(创建)的数据库文件名
                        ppDb:sqlite3数据库句柄的指针 

        ​​​​​​​        返回值:   ​​​​​​​        ​​​​​​​        

                        #defineSQLITE_OK 0 成功结果
                        错误开始码

                        #defineSQLITE_ERROR 1           SQL错误或缺少数据库
                        #defineSQLite                   内部逻辑错误
                        #defineSQLITE_PERM 3            拒绝访问权限
                        #defineSQLITE_ABORT 4           回调例程请求中止
                        #define SQLITE_BUSY 5           数据库文件被锁定
                        # SQLITE_LOCKED 6               数据库中的表被锁定
                        #define SQLITE_NOMEM 7          A malloc() failed 
                        #define SQLITE_READONLY 8       尝试写一个只读数据库
                        #defineSQLITE_INTERRUPT 9       被sqlite3_interrupt()终止的操作
                        # SQLITE_IOERR 10               磁盘I/O出错
                        #define SQLITE_CORRUPT 11       数据库磁盘镜像不正常
                        #defineSQLITE_NOTFOUND 12       sqlite3_file_control()中未知的操作码
                        #define SQLITE_FULL 13          插入失败,因为数据库已满
                        # SQLITE_CANTOPEN 14            无法打开数据库文件
                        #defineSQLITE_PROTOCOL 15       数据库锁定协议错误
                        #define SQLITE_EMPTY 16         数据库为空
                        #defineSQLITE_SCHEMA 17         数据库模式改变
                        #defineSQLITE_TOOBIG 18         字符串或BLOB超过大小限制
                        #defineSQLITE_CONSTRAINT 19     由于约束违反而终止
                        #defineSQLITE_MISMATCH 20       数据类型不匹配
                        #define SQLITE_MISUSE 21        错误使用的库
                        #define SQLITE_NOLFS 22         使用主机不支持的操作系统特性
                        #defineSQLITE_AUTH 23           拒绝授权
                        #defineSQLITE_FORMAT 24         辅助数据库格式错误
                        #defineSQLITE_RANGE 25          第二个参数为sqlite3_bind out of range 
                        #defineSQLITE_NOTADB 26         打开的文件不是数据库文件
                        #defineSQLITE_ROW 100           sqlite3_step()有另一行
                        #define SQLITE_DONE 101         sqlite3_step()已经完成执行

int sqlite3_close(sqlite3 *db);

                        功能:关闭数据库

                        参数: db:数据库的句柄

                        返回值同上

const char* sqlite3_errmg(sqlite3 *db);

                        功能:收集错误信息            

                        参数: db:数据库的句柄

                        返回值:

                                  成功返回错误说明的字符串指针,错误返回空指针;

int sqlite3_exec(sqlite3 *db,const char *sql,int callback,void *arg,char **errmsg);

                        功能:执行sql

                        参数:

                        db:数据库句柄

                        sql:执行的sql

                        callback:回调函数

                         arg:参数

                         errmsg:错误信息

                        返回值同上

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

                        功能:回调函数

                        参数:

                                arg:参数
                                column_size:数据库的字段数
                                column_value[]:列的值
                                column_name[]:字段名字       

demo:    

              1.编写数据库接口及操作函数

              2.可使用.open,create,insert,select,update,delete,drop等SQL

代码示例:

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

static int callback(void *args,int column_size,char *column_name[],char *column_value[])
{
        int i;
        printf("%s\n",(char *)args);
        printf("======================\n");
        for(i = 0;i < column_size;i++)
        {
                printf("%s   =   %s\n",column_name[i],column_value[i]);
        }
        printf("======================\n");
        return 0;
}

void result(char data_bin[])
{
        sqlite3 *db;
        int ret;
        int ret_exec;
        char input[128] = {'\0'};
        char *err_msg = NULL;
        ret = sqlite3_open(data_bin,&db);
        if(ret != 0)
        {
                printf("create/open db faili,why : %s\n",sqlite3_errmsg(db));
                exit(-1);
        }
        while(1)
        {
                printf("input your sql:\n");
                printf(">>>");
                memset(input,'\0',128);
                fgets(input,128,stdin);
                ret_exec = sqlite3_exec(db,input,callback,"context of sql:",&err_msg);
                if(ret_exec != 0)
                {
                        printf("error:%s\n",err_msg);
                }
        }
        sqlite3_close(db);
}

int main(int argc,char **argv)
{
        if(argc != 2)
        {
                printf("param is error\n");
                exit(-1);
        }
        result(argv[1]);
        return 0;
}

结果示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值