Office中国论坛/Access中国论坛

标题: sqlite内存数据库的使用以及内存数据库导入导出 [打印本页]

作者: tmtony    时间: 2015-5-18 12:00
标题: sqlite内存数据库的使用以及内存数据库导入导出
摘自peter的文章,Sqlite内存数据库因为速度快,操作方便而让sqlite在一些企业应用场景非常有用,如经常使用的产品信息 BOM信息等。如果每次都从数据库服务器读取加载,速度会比较慢。这时内存数据库就非常有用了。

一、初识sqlite
         偶然的机会接触到sqlite,不禁惊叹sqlite的体型小巧而功能强大(看来软件也不可貌相哦),Sqlite 是开源的内存数据库(也可以称之为内嵌式数据库),大量无私的程序员为sqlite发展贡献了自己的力量。Sqlite 应用极广,手机、mp3,机顶盒可能存在sqlite身影,Apple的Mac os,linux,或者windows在安装第三方软件时也可以应用sqlite。
         Sqlite技术优点:
1.  Sqlite轻量级、跨平台的关系型开源内存数据库,使用sqlite只需带上动态库,就可使用sqlite全部功能(动态库Windows下487KB,Linux下347KB);
2.   核心引擎不依赖第三方软件,也不需要安装;
3.   数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。如果使用内存方式,可以没有该文件;
4.   除了主流操作系统,SQLite还支持了很多冷门的操作系统。它对很多嵌入式系统(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)也支持;
5.   SQLite的API不区分当前操作的数据库是在内存还是在文件(对于存储介质是透明的);
等等;
         缺点:
1.    并发访问的锁机制
SQLite在并发(包括多进程和多线程)读写方面的性能不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错;
2.     SQL标准支持不全
如不支持外键约束;
          看来还是优点多于缺点!呵呵!
二、sqlite体系机构
               sqlite模块将 查询过程分为几个不连续的任务,在结构栈的顶部编译查询语句,中不执行,在底部处理操作系统的存储和接口。
." action-data="http%3A%2F%2Fhi.csdn.net%2Fattachment%2F201109%2F8%2F0_1315465068M797.gif" action-type="show-slide" style="border: 0px; list-style: none;">
                                                            图1-2SQLite的体系结构
(注:结构图转载于《SQLite权威指南》)
三、sqlite文件数据库、内存数据库建立及导入导出
           sqlite官网(www.sqlite.org)同时提供已编译版本和源程序。同时适用于Windows和linux。
           经过前面sqlite热身之后,赶紧转入正题,干点正事!(*^__^*)
3.1 文件数据库、内存数据库的建立3.1.1文件数据库的建立
Windows:
1)  下载sqlite最新版本sqlite3.exe;
2)  dos进入到执行程序目录下;
3)  输入 sqlite3  d:\test.db(如果后面执行路径存在test.db 则打开数据库;如果执行路径下不存在test.db则新建test.db);
Linux:
1)  下载sqlite最新版本sqlite3;
2)  Shell进入到可知性程序目录下;
3) 输入sqlite3  /home/test.db(如果后面执行路径存在test.db 则打开数据库;如果执行路径下不存在test.db则新建test.db);
至此则打开或者新建一个文件数据库库;
3.1.2 内存数据库的建立
[cpp]  


调用实例:
[cpp]  


3.3 文件数据库命令格式的导入导出
         3.3.1 文件数据库命令格式数据导出、备份
方法一:(sqlite数据库内部)
Sqlite>.output d:\test.sql

相关文章:

sqlite建立内存数据库方法为打开数据库是数据库名称用 :memory: 。

下面为如何将文件数据库附加到内存数据库中

如果你使用内存数据库

我猜想,SQLite会使用系统默认的编码。

所以,你如果你要把数据库附加到内存数据库时,则需要注意附加的文件编码也要使用系统默认的。

否则,你无法使用附加的数据。

关键点:编码问题。

还有一个问题,你的语法对了吗?

正确的语法:@"ATTACH 'd:\gldstest.db' as db333 key '123456'


以下是一个前辈在一篇文章《SQLite的加密扩展方法 》提到的三个方法:

在sqlite3sec中你可以使用下列三种方法来添加一个加密的数据库:

  sqlite> ATTACH 'b.db' AS b;

  sqlite> ATTACH 'b.db' AS b KEY 'your passphrase';

  sqlite> ATTACH 'b.db' AS b KEY blob;


第一种方法使用和主数据库相同的密码(或者是没有密码) , 第二种方法用你输入的短语来做密码. 第三种方法假设你用BLOB的十六进制值作为密码(例如 f03d69ac3981...). 不过我还没有充分的测试这个使用BLOB作为密码的版本. 请注意:如果你的主数据库是加密的,然后你想添加一个不加密的数据库,这种情况下你需要用第二种方法然后传递一个空字符串('')作为密码.



作者: 风中漫步    时间: 2015-5-18 13:32
主要缺点还是不支持网络.仅支持一写多读.至于标准,很多公司都有自己的小准则,acc有的也不支持.
估计用惯ms产品的网友对他一定没好感{:soso_e100:}

作者: tmtony    时间: 2015-5-18 13:44
主要缺点是 并发操作
作者: 风中漫步    时间: 2015-5-18 14:11
呵呵,站长把它用在什么地方了?
单机不会有那些并发吧
请指教
作者: roych    时间: 2015-5-18 15:58
额,我一直以为mongodb比较好呢{:soso_e120:}——不过那是NOSQL的,做网页前端也行用得上{:soso_e120:}
附上主流数据库排行榜
http://db-engines.com/en/ranking
作者: 风中漫步    时间: 2015-5-18 17:33
roych 发表于 2015-5-18 15:58
额,我一直以为mongodb比较好呢——不过那是NOSQL的,做网页前端也行用得上
附 ...

听说mongodb也不错啊.只是许可不给力.
sqlite是真正的自由软件,袖珍,用在移动便携设备上很合适.传说最早是为美军导弹驱逐舰上设计的,设计初衷就是要简单小巧,差不多也做到了.
个人觉得它最大的优点是跨平台且袖珍.
功能也符合它的身段,够用.
看它的设计,当初作者可能也有其他打算.
谢谢斑竹的排行榜,长见识了




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3