首页 > 数据库 > SQLite > 正文

嵌入式数据库SQLite的一篇教程

2024-09-07 00:10:06
字体:
来源:转载
供稿:网友

1 嵌入式数据库简介----SQLite


2 SQLite介绍 纲要

SQLite的发展
SQLite的优势
SQLite的缺憾
SQLite的内部结构
SQLite数据库的使用

SQLite的命令行接口
SQLite命令行使用
SQLite数据库的编程接口

C/C++接口

简单应用
自定义简单函数
自定义聚合函数
自定义排序函数
PERL接口
SQLite数据库在ASTRAL中的应用

SQLite在多级关联中的应用
SQLite在IPIS中的应用
SQLite在web中的应用


3 SQLite的发展

2000年由D.Richard Hipp开始开发
2001年发布2.0v
2004年发布3.0v(采用了不同的数据文件格式以及编程接口)
目标
易于管理、操作、维护、自定义以及提供易用的编程接口


4 SQLite的优势

内存占用量小
比MySQL(2倍), PostgreSQL(20倍)快
ACID兼容(原子性,一致性,独立性,可持久性),支持视图,子查询,触发器
单个库文件中包含数据库引擎与接口,且其运行不依赖其它库
可以将数据放进单个文件
为C/C++, Perl,PHP等应用提供了接口
免费
允许为SQL命令集动态添加自定义函数(简单函数及聚集函数),而无需重编SQLite库


5 SQLite的缺点

事务处理并发性
SQLite通过数据库级上的独占性和共享锁来实现独立事务处理,这意味着当多个进程或线程在同一时间可以从数据库读取数据,但是只能有一个可以同时写入,在写入之前,必须获得独占锁,其它的读操作不允许发生。
性能
在创建索引( CREATE INDEX)和删除表( DELTE TABLE)时明显比其它数据库慢
用户管理/安全
数据库的访问是基于操作系统对文件的控制来控制的,不能通过用户来区分数据库中的不同数据库.
举例,将数据库文件去写权限,然后向其中插入或删除数据条目,将提示写失败。但是不能通过数据库本身的来对权限进行设置。
在网上已经有一些SQLite的安全问题的解决方案,但大多数是商业化的,有些提供在整个数据库上的加密,有些提供在数据级别的加密。比如secure SQLite之类。

6 SQLite的内部结构

  在内部,SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。所有 SQL 语句都被编译成易读的、可以在 SQLite 虚拟机中执行的程序集。


7 SQLite数据库的使用

SQLite命令行接口
SQLite除库本身外,还包含命令行接口,可以在$SQLITE_HOME/bin下发现sqlite/sqlite3,
命令行功能介绍

运行方式:sqlite DBFile
得到提示符sqlite>
运行.help(注意sqlite命令行提供的命令都以”.”开头,可以看到sqlite命令行接口提供下面的功能.


8 SQLite命令行功能简介

SQLite命令行功能简介
DML/DDL语句的使用和以前一致,不做介绍
.databases 列出数据库文件名
.tables ?PATTERN? 列出?PATTERN?匹配的表名
.import FILE TABLE 将文件中的数据导入的文件中
.dump ?TABLE? 生成形成数据库表的SQL脚本
.output FILENAME 将输出导入到指定的文件中
.output stdout 将输出打印到屏幕
.mode MODE ?TABLE? 设置数据输出模式(csv,html,tcl…
.nullvalue STRING 用指定的串代替输出的NULL串
.read FILENAME 执行指定文件中的SQL语句
.schema ?TABLE? 打印创建数据库表的SQL语句
.separator STRING 用指定的字符串代替字段分隔符
.show 打印所有SQLite环境变量的设置
.quit 退出命令行接口


9 SQLite命令行功能使用

下面举例说明SQLITE命令行的常规使用:
SQLite数据导入

创建数据文件
这个文件可能来自其它的其它程序的输出之类,现只我们手功创建下面的数据文件data.txt(用逗号分隔):

id, name,gender, age
1,dq,male,24
2,jz,female,27
3.pp,male,26
4,cj,male,28
5,zc,male,25
创建数据库表

五种数据类型
TEXT,NUMERIC,INTEGER,REAL,NONE
数据类型的转换
向保存的目标类型转换,如将text保存到integer,则试着将文件转为数字(int或float),如果转换失败,则做为文件保存.
数据库表创建
shell> sqlite3 test.db
sqlite> create table employee( id integer primary key, name text, gender text, age integer );


10 SQLite命令行功能使用

数据导入
sqlite>.import data.txt employee
sqlite提示:data.txt line1:expected 4 coloumns of data but found 1;
从经验应该能看出是字符分隔符有问题,先来看看系统用什么样的提示符:
.show之后可以看到 separator: “|”,也就是说系统默认的分隔符为”|”面不是”,”,下面修改分隔字符:
sqlite>.separator “,”
sqlite>.import data.txt employee
sqlite> select * from employee where id > 2;
sqlite> select * from employee where name > 9999999999999;
上面这句用来说明text>integer(这个和比较字符的内码得到的结果是相同的)
数据比较

NULL数字之间用数学比较方法比较
TEXT/BLOB用memcpy()进行比较
比较方法是可以自已定义或者重载的(我们将在后面提及中文字串的比较)
Ex: sqlite> select id >2, name > ‘dong’, gender=‘male’ from employee;

0,1,1
0,1,0
1,1,1
1,0,1
1,1,1

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表