|
SQLite 是轻量嵌入式数据库,发布程序只要带一个sqlite.dll即可。
在aardio中可以将该DLL用$操作符直接嵌入内存直接加载,发布时不需要dll文件。
SQLite 顾名思议是以SQL为基础的数据库软件,SQL是一套强大的数据库语言,主要概念是由「数据库」、「资料表」(table)、「查询指令」(queries)等单元组成的「关联性数据库」(进一步的概念可参考网络上各种关于SQL及关联性数据库的文件)。因为SQL的查询功能强大,语法一致而入门容易,因此成为现今主流数据库的标准语言(微软、Oracle等大厂的数据库软件都提供SQL语法的查询及操作)。
SQLite不同于其他大部分的SQL数据库引擎,因为它的首要设计目标就是简单化:
易于管理
易于使用
易于嵌入其他大型程序
易于维护和配置
支援大多数的SQL指令(下面会简单介绍)。
一个档案就是一个数据库。不需要安装数据库服务器软件。
完整的Unicode支援(因此没有跨语系的问题)。
速度很快。
许多人喜欢SQLite因为它的小巧和快速.
但是这些特性只是它的部分优点, 使用者还会发现SQLite是非常稳定的. 出色的稳定性源于它的简单, 越简单就越不容易出错. 除了上述的简单、小巧和稳定性外, 最重要的在于SQLite力争做到简单化.
简单化在一个数据库引擎中可以说是一个优点, 但也可能是个缺点, 主要决定于你想要做什么. 为了达到简单化, SQLite省略了一些人们认为比较有用的特性, 例如高并发性、 严格的存取控制、 丰富的内置功能、 存储过程、复杂的SQL语言特性、 XML以及Java的扩展, 超大的万亿级别的数据测量等等. 如果你需要使用上述的这些特性并且不介意它们的复杂性, 那么SQLite也许就不适合你了. SQLite没有打算作为一个企业级的数据库引擎, 也并不打算和Oracle或者PostgreSQL竞争.
仅凭经验来说SQLite适用于以下场合: 当你更看中简单的管理、使用和维护数据库, 而不是那些企业级数据库提供的不计其数的复杂功能的时候,使用SQLite是一个比较明智的选择. 事实也证明, 人们在许多情况下已经清楚的认识到简单就是最好的选择.
OS X自从10.4后把SQLite这套相当出名的数据库软件,放进了作业系统工具集里。OS X包装的是第三版的SQLite,又称SQLite3。这套软件有几个特色: 软件属于公共财(public domain),SQLite可说是某种「美德软件」(virtueware),作者本人放弃着作权,而给使用SQLite的人以下的「祝福」(blessing):
May you do good and not evil. 愿你行善莫行恶
May you find forgiveness for yourself and forgive others. 愿你原谅自己宽恕他人
May you share freely, never taking more than you give. 愿你宽心与人分享,所取不多于你所施予
aardio在v0.55.3已提供sqlite支持库。
在aardio中声明的API已经加入了各自的名字空间,
例如原来的sqlite3_bind_double 在aardio中声明为 sqlite.bind.double
在aardio开发环境中如下图操作查看范例:
示例:- import sqlite
- //打开控制台
- io.open();
- //打开数据库连接
- var sqlConnection = sqlite("/db.db")
- if( not sqlConnection.existsTable("film") ){
- //创建表
- sqlConnection.exec( "create table film(
- title,
- length,
- year,
- starring
- );"
- )
-
- //插入数据
- sqlConnection.exec( "insert into film values ('Silence of the Lambs, The', 11.8, datetime('now','localtime'),'Jodie Foster' );")
- sqlConnection.exec( "insert into film values ('Contact', 153, 1997, 'Jodie Foster');")
- sqlConnection.exec( "insert into film values ('Crouching Tiger, Hidden Dragon', 120, 2000, 'Yun-Fat Chow');")
-
- io.print("最后插入ID",sqlConnection.last_insert_rowid())
- }
- else {
- sqlConnection.exec( "UPDATE film SET year=2010, length=112 WHERE year=1991")
- if( ! sqlConnection.changes() ){
- //更新语句影响的行为为0,下面插入新的
- sqlConnection.exec( "insert into film values ('Silence of the Lambs, The', 112, 2010, 'Jodie Foster');")
- }
-
- io.print("最后插入ID",sqlConnection.last_insert_rowid())
- }
- //sql里的问号表示参数
- var command = sqlConnection.prepare("insert into film values (?,123, 1991, 'Jodie Foster');" )
- //绑定一个参数,其实在aardio里所有字符串都是blob,所以非常简单
- command.bind.blob( "用string.load读入二进制字符串" )//可以使用第二个参数指定是第几个问号
- command.step() //执行
- command.finalize() //释放命令对象
- //迭代方式查询数据
- for title, length, year, starring in sqlConnection.each("select * from film") {
- io.print( title, length, year, starring )
- break;
- }
- io.print("------------迭代数据 ok")
- //枚举方式 注意枚举返回的数据都是文本类型.
- sqlConnection.enum(
- "select * from film",
- function(tName,tValue){
- for(col=1;#tName;1){
- io.print(tName[col],tValue[col])
- }
- //return false; //返回false表示停止枚举
- }
- )
- io.print("------------枚举数据 ok")
- dbTable = sqlConnection.getTable("select * from film")
- //遍列所有行记录
- for(row=1;#dbTable ){
- //打印所有列名和值
- for( k,v in dbTable[row] ){
- io.print(k,v);
- }
- }
- io.print("------------数据列表 ok")
- //删除表
- sqlConnection.exec("drop table film")
- sqlConnection.close()
- execute("pause") //按任意键继续
- io.close();//关闭控制台
复制代码 |
评分
-
查看全部评分
|