嵌入式数据库之sqlite3

一、数据库基本概念

        数据:能够输入计算机并能被计算机程序识别和处理的信息集合。

        数据库:数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合。

二、常用的数据库

1.大型数据库

        Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。

        IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统,支持包Linux在内的一系列平台。

2.中型数据库

        Server是微软开发的数据库产品,主要支持windows平台。

3.小型数据库

        mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司,2008年被Sun公司收购,开放源码。

三、基于嵌入式的数据库

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

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

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

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

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

四、SQLite基础

1.SQLite的源代码是C,其源代码完全开放。SQLite第一个Alpha版本诞生于2000年5月。 他是一个轻量级的嵌入式数据库。

2.SQLite有以下特性:

        (1)零配置一无需安装和管理配置;

        (2)储存在单一磁盘文件中的一个完整的数据库;

        (3)数据库文件可以在不同字节顺序的机器间自由共享;

        (4)支持数据库大小至2TB;

        (5)足够小,全部源码大致3万行c代码,250KB;

        (6)比目前流行的大多数数据库对数据的操作要快;

五、创建数据库

1.手工创建

―使用SQLite3工具,通过手工输入SQL命令行完成数据库创建.

―用户在Linux的命令行界面中输入SQLite3可启动SQLite3工具

2.代码创建

―在代码中常动态创建数据库

―在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库

3.数据库的安装

本地安装:sudo dpkg -i  *.deb

在线安装:sudo qpt-get install-sqlite3

六、SQLite常用命令介绍

1.在终端下运行sqlite3   <*.db>,出现如下提示符

―SQLite  version  3.7.2

―Enter “.help” for instructions

―Enter SQL statements terminated with a “;”

―sqlite>

<*.db> 是要打开的数据库文件。若该文件不存在,则自动创建

2.显示所有命令:sqlite> .help

3.退出sqlite3:sqlite>.quit

4.显示当前打开的数据库文件:sqlite>.database

5.显示数据库中所有表名:sqlite>.tables

6.查看表的结构:―sqlite>.schema 

/*******************************************/

7.以下为SQL命令,每个命令以;结束

(1)创建新表―sqlite>create  table    (f1  type1, f2  type2,…);

        create table stuinfo(id integer, name text, age integer, score float);//创建表格

(2)删除表―sqlite>drop  table 

        drop table stuinfo;

(3)查询表中所有记录―sqlite>select  *  from  ;

        select  *  from  stu;//查询所有字段

(4)按指定条件查询表中记录―sqlite>select  *  from    where 

        select * from stuinfo;//查询所有字段
        select * from stuinfo where score = 80;
        select * from stuinfo where score = 80 and name= 'zhangsan';
        select * from stuinfo where score = 80 or name='wangwu';
        select name,score from stuinfo;  查询指定的字段
        select * from stuinfo where score >= 85 and score < 90;

(5)向表中添加新记录―sqlite>insert  into    values (value1, value2,…);

        insert into stuinfo values(1001, 'zhangsan', 18, 80);

        insert into stuinfo (id, name, score) values(1002, 'lisi', 90);

(6)按指定条件删除表中记录―sqlite>delete  from    where 

        delete from stuinfo where id=1003 and name='zhangsan';

(7)更新表中记录

―sqlite>update    set  , …   where 

        update stuinfo set age=20 where id=1003;//设置一个字段的更新
        update stuinfo set age=30, score = 82 where id=1003;//设置两个字段的更新

(8)在表中添加字段―sqlite>alter table

add column default  …;

        alter table stuinfo add column sex char;

(9)在表中删除字段(删除一列)

        Sqlite中不允许删除字段,可以通过下面步骤达到同样的效果

        sqlite> create table stu1 as select id, name, score from stu//创建一张新的表

        sqlite> drop table stu//删除原有的表

        sqlite> alter table stu1 rename to stu//讲新的表名字改成原有旧表的名字

数据库设置主键:
     create table info(id integer primary key autoincrement, name vchar);

(10)创建带约束数据表
创建表格的时候设置字段约束

PRIMARY KEY主键,NOT NULL不能为NULL,UNIQUE唯一,DEFAULT默认值,ID INTEGER PRIMARY KEY AUTOINCREMENT id自动增长

以此表格为例:

嵌入式数据库之sqlite3_第1张图片(1)创建数据表
create  table  device  (id  integer primary key autoincrement,
                                         name  varchar(256) unique ,
                                         status int not NULL default 0,
                                         online int not NULL);

创建时加入条件(表不存在是创建)

create table if not exists device(id integer primary key autoincrement, 
                                                  name varchar(256) unique, 
                                                  status int default 0, 
                                                  online int not NULL);

insert into stu(name, online) values('led6', 0);可以实现部分赋值,id值自增

七、SQLite编程接口

1. int   sqlite3_open(char  *path,   sqlite3 **db);

        ―功能:打开sqlite数据库

        ―path:数据库文件路径、

        ―db:指向sqlite句柄的指针、

        ―返回值:成功返回0,失败返回错误码(非零值)

2. int   sqlite3_close(sqlite3 *db);

        ―功能:关闭sqlite数据库        

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

3. const  char  *sqlite3_errmg(sqlite3 *db);        

        ―返回值:返回错误信息

4. Typedef  int (*sqlite3_callback)(void *, int,char **, char **);

5. Int sqlite3_exec(sqlite3 *db, const  char  *sql, sqlite3_callback callback, void *, char **errmsg);

        ―功能:执行SQL操作

        ―db:数据库句柄

        ―sql:SQL语句

        ―callback:回调函数

        ―errmsg:错误信息指针的地址

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

6. typedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);

        ―功能:每找到一条记录自动执行一次回调函数

        ―para:传递给回调函数的参数

        ―f_num:记录中包含的字段数目

        ―f_value:包含每个字段值的指针数组

        ―f_name:包含每个字段名称的指针数组

        ―返回值:成功返回0,失败返回-1

7.不使用回调函数执行SQL语句

int   sqlite3_get_table(sqlite3 *db, const  char  *sql,  char ***resultp,  int*nrow,  int *ncolumn, char **errmsg);

        ―功能:执行SQL操作

        ―db:数据库句柄

        ―sql:SQL语句

        ―resultp:用来指向sql执行结果的指针

        ―nrow:满足条件的记录的数目

        ―ncolumn:每条记录包含的字段数目

        ―errmsg:错误信息指针的地址、

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

8.void sqlite3_free_table(char **result);//查询

你可能感兴趣的:(数据库,sqlite,数学建模)