全志H616学习笔记------SQLite数据库

目录

SQLite简介

SQLite数据库安装

安装方式1:

安装方式2:

SQLite的命令用法

创建一个数据库

创建一张表格

插入一条记录

查看数据库的记录

删除一条记录

更改一条记录

删除一张表

SQLite的编程操作

 打开/创建数据库的C接口

错误码(Result Codes)

创建表的C接口


SQLite简介

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

SQLite是一个无服务器的数据库,是自包含的。这也成为嵌入式数据库,这意味着数据库引擎作为应用程序的的一部分运行。

MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。

SQLite的优点SQLite的缺点MySQL的优点MySQL的缺点

基于文件,易于设置和使用

适合基础开发和测试

轻松携带

使用标准SQL语法进行微小更改

使用方便

缺乏用户管理和安全功能

不容易扩展

不适合大数据库

无法定制

使用方便

提供了许多与数据库相关的功能

良好的安全功能

提供良好的速度和性能

提供良好的用户管理和多种访问机制

需要一些技术专业知识来设置

与传统SQL相比,语法略有不同

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

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

SQLite关系型数据库,体积小,支持ACID事务

Berkeley DB并没有数据库服务器概念,他的程序直接连接到应用层中

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

SQLite数据库安装

下载地址:

安装方式1:

sudo apt-get install sqlite

安装方式2:

SQLite Download Pagehttps://www.sqlite.org/download.html

 

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

如上图,安装成功后,运行sqlite3进去SQL命令操作流程。 

SQLite的命令用法

  • 创建一个数据库

方式一:

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

数据库退出后在命令当前路径创建数据库test.db

方式二:

sqlite3 test.db   //在命令运行当前窗口创建数据库test.db

在数据库命令下

.database   列出当前打开的数据库

.quit   退出

  • 创建一张表格

create table stu(id Integer,name char,score Integer);
  • 插入一条记录

    insert into stu values(001,'zhangsan',100);
    insert into stu values(002,"lisi",99);              //''和""都行
    insert into stu (name,score) values("wangwu",98);   //插入部分字段内容
  • 查看数据库的记录

    select * from stu;           //查询所有字段的结果
    select name,sore from stu;   //查询数据库中部分字段的内容
  • 删除一条记录

    delete from stu where id = 001;
  • 更改一条记录

update stu set name = 'mazi' where id = 002;
  • 删除一张表

    drop table stu;

更全面的SQLite命令介绍:SQLite 简介 | 菜鸟教程 (runoob.com)

SQLite的编程操作

 打开/创建数据库的C接口

下面的代码显示了如何连接到一个现有的数据库,如果数据库不在,那么它就会被创建,最后一个将返回已一个数据库对象。

#include <sqlite3.h>

sqlite3_open(const char *filename,sqlite3 **ppDb);
该例程打开一个只想SQLite 数据库文件的链接,返回一个用于其他SQLite 程序的数据库连接对象

sqlite3(sqlite3*);
该例程关闭之前调用 sqlite3_open() 打开的数据库连接,所有与连接相关的语句都应在连接关闭之前完成
如果还有查询没完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误信息

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

错误码(Result Codes)

#define SQLITE_OK           0   /* 成功 | Successful result */
/* 错误码开始 */
#define SQLITE_ERROR        1   /* SQL错误 或 丢失数据库 | SQL error or missing database */
#define SQLITE_INTERNAL     2   /* SQLite 内部逻辑错误 | Internal logic error in SQLite */
#define SQLITE_PERM         3   /* 拒绝访问 | Access permission denied */
#define SQLITE_ABORT        4   /* 回调函数请求取消操作 | Callback routine requested an abort */
#define SQLITE_BUSY         5   /* 数据库文件被锁定 | The database file is locked */
#define SQLITE_LOCKED       6   /* 数据库中的一个表被锁定 | A table in the database is locked */
#define SQLITE_NOMEM        7   /* 某次 malloc() 函数调用失败 | A malloc() failed */
#define SQLITE_READONLY     8   /* 尝试写入一个只读数据库 | Attempt to write a readonly database */
#define SQLITE_INTERRUPT    9   /* 操作被 sqlite3_interupt() 函数中断 | Operation terminated by sqlite3_interrupt() */
#define SQLITE_IOERR       10   /* 发生某些磁盘 I/O 错误 | Some kind of disk I/O error occurred */
#define SQLITE_CORRUPT     11   /* 数据库磁盘映像不正确 | The database disk image is malformed */
#define SQLITE_NOTFOUND    12   /* sqlite3_file_control() 中出现未知操作数 | Unknown opcode in sqlite3_file_control() */
#define SQLITE_FULL        13   /* 因为数据库满导致插入失败 | Insertion failed because database is full */
#define SQLITE_CANTOPEN    14   /* 无法打开数据库文件 | Unable to open the database file */
#define SQLITE_PROTOCOL    15   /* 数据库锁定协议错误 | Database lock protocol error */
#define SQLITE_EMPTY       16   /* 数据库为空 | Database is empty */
#define SQLITE_SCHEMA      17   /* 数据结构发生改变 | The database schema changed */
#define SQLITE_TOOBIG      18   /* 字符串或二进制数据超过大小限制 | String or BLOB exceeds size limit */
#define SQLITE_CONSTRAINT  19   /* 由于约束违例而取消 | Abort due to constraint violation */
#define SQLITE_MISMATCH    20   /* 数据类型不匹配 | Data type mismatch */
#define SQLITE_MISUSE      21   /* 不正确的库使用 | Library used incorrectly */
#define SQLITE_NOLFS       22   /* 使用了操作系统不支持的功能 | Uses OS features not supported on host */
#define SQLITE_AUTH        23   /* 授权失败 | Authorization denied */
#define SQLITE_FORMAT      24   /* 附加数据库格式错误 | Auxiliary database format error */
#define SQLITE_RANGE       25   /* 传递给sqlite3_bind()的第二个参数超出范围 | 2nd parameter to sqlite3_bind out of range */
#define SQLITE_NOTADB      26   /* 被打开的文件不是一个数据库文件 | File opened that is not a database file */
#define SQLITE_ROW         100  /* sqlite3_step() 已经产生一个行结果 | sqlite3_step() has another row ready */
#define SQLITE_DONE        101  /* sqlite3_step() 完成执行操作 | sqlite3_step() has finished executing */
/* 错误码结束 */
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>


int main(int argc,char **argv)
{

    sqlite3 *db;
    int ret;

    if(argc < 2)
    {
        printf("Usage: %s xxx.db\n",argv[0]);
        exit(-1);
    }

    if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK)
    {
        printf("open %s success\n",argv[1]);
    }else{
        printf("error:%s\n",sqlite3_errmsg(db));
    }

    sqlite3_close(db);
    printf("done\n");

    return 0;
}

创建表的C接口

下面的C代码将用于在先前创建的数据库中创建一个表:

sqlite3_exec(sqlite3* , const char *sql, sqlite_callback , void *data,char **errmsg);
该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以有多个 SQL 命令组成。
在这里,第一个参数 sqlite3 是打开数据库的对象,sqlite_callback 是一个回调,data 作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。
sqlite_exec() 程序解析并执行由 sql 参数所给的每个命令,知道字符串结束或者遇到错误位置。

callback 函数:

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

参数分析:

void *arg                :是sqlite_exec函数的第四个参数

column_size          :数据库的字段数

column_value[ ]     :列的值

column_name[ ]    :字段名字

#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("%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 *errmsg;
    int ret;

    if(argc < 2)
    {
        printf("Usage: %s xxx.db\n",argv[0]);
        exit(-1);
    }

    if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK)
    {
        printf("open %s success\n",argv[1]);
    }else{
        printf("error:%s\n",sqlite3_errmsg(db));
    }

    //创建一个新表
    //sqlite3_exec(sqlite3* , const char *sql, sqlite_callback , void *data,char **errmsg);
    ret = sqlite3_exec(db,"create table Class01(id Integer,name char,score Integer);",callback,"content of sql:",&errmsg);
//errmsg 野指针并不发生段错误,该函数内部会对野指针进行一些操作
    if(ret != SQLITE_OK)
    {
        printf("create: ret = %d,error:%s\n",ret,errmsg);
    }
    //往表里面插入信息
    ret = sqlite3_exec(db,"insert into Class01 values(001,'zhangsan',100);",callback,"content of sql:",&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("insert: ret = %d,error:%s\n",ret,errmsg);
    }
    //查看表里面的内容
    ret = sqlite3_exec(db,"select * from Class01;",callback,"content of sql:",&errmsg);
    if(ret != SQLITE_OK)
    {
        printf("select: ret = %d,error:%s\n",ret,errmsg);
    }

    sqlite3_close(db);
    printf("done\n");

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值