SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。

SQLite的最新版本是SQLite3,官网http://www.sqlite.org/,听说SQLite3还可以当内存数据库,特地研究一下。SQLite3的基本使用,我这边就不再介绍,网上很多,大家可以参考http://yuanzhifei89.iteye.com/blog/1123870这篇文章。

SQLite3,用C语言编写,有给C++提供很方便的类库,但是Delphi却不能使用,但是总有Delphi牛人把SQLite3的API封装了一下,方便Delphi调用。我使用的封装类是sqlite simple delphi,SQLite3官网上面还有很多其它的封装类,有兴趣的可以研究一下,http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers。

sqlite simple delphi的官网网站是http://www.itwriting.com/blog/?page_id=659,下载下来以后是一个压缩包里面是一个demo。咱们需要里面的两个文件。SQLite3.pas 跟 SQLiteTable3.pas ,把他们复制到工程目录下面,然后在需要操作库的单元文件里面 uses SQLiteTable3 。

procedure TForm1.btnTestClick(Sender: TObject);
var
slDBpath: string;
sldb: TSQLiteDatabase;
sltb: TSQLIteTable;
sSQL: String;
Notes: String;beginslDBPath := ExtractFilepath(application.exename)+ 'test.db';sldb := TSQLiteDatabase.Create(slDBPath);tryif sldb.TableExists('testTable') thenbeginsSQL := 'DROP TABLE testtable';sldb.execsql(sSQL);end;sSQL := 'CREATE TABLE testtable ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL,';sSQL := sSQL + '[Name] VARCHAR (255),[Number] FLOAT, [notes] BLOB, [picture] BLOB COLLATE NOCASE);';sldb.execsql(sSQL);sldb.execsql('CREATE INDEX TestTableName ON [testtable]([Name]);');//begin a transactionsldb.BeginTransaction;sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Some Name",4,587.6594,"Here are some notes");';//do the insertsldb.ExecSQL(sSQL);sSQL := 'INSERT INTO testtable(Name,OtherID,Number,Notes) VALUES ("Another Name",12,4758.3265,"More notes");';//do the insertsldb.ExecSQL(sSQL);//end the transactionsldb.Commit;//query the datasltb := slDb.GetTable('SELECT * FROM testtable');tryif sltb.Count > 0 thenbegin//display first rowebName.Text := sltb.FieldAsString(sltb.FieldIndex['Name']);ebID.Text := inttostr(sltb.FieldAsInteger(sltb.FieldIndex['ID']));ebNumber.Text := floattostr( sltb.FieldAsDouble(sltb.FieldIndex['Number']));Notes :=  sltb.FieldAsBlobText(sltb.FieldIndex['Notes']);memNotes.Text := notes;end;finallysltb.Free;end;finallysldb.Free;end;
end;

当数据库的路径包含中文的时候,使用sqlitetable3就打不开数据库了,我把sqlitetable3的源码改动了一下,中文路径就能正常识别了。

修改后的SQLite3.pas 跟 SQLiteTable3.pas下载地址

当SQLite3作内存数据库时,只需要将数据库路径改成“:memory:”即可,其它的操作如创建表、查询表都是和操作本地数据库一样的,如下:

SqlDb := TSQLiteDatabase.Create(':memory:');

我编写的Delphi使用SQLite3的Demo,包括本地数据库和内存数据库,本地数据库加载到内存,内存数据库备份到本地,下载地址

用记事本打开sqlite3的数据库文件,发现之前我们插入的数据都能看到,几乎都是明文显示的,这很明显是不满足我们要求的。请关注下一篇文章,关于SQLite3的加密。

Delphi中使用SQLite3(一)相关推荐

  1. DELPHI 中 Window 消息大全使用详解

    Window 消息大全使用详解 导读: Delphi是Borland公司的一种面向对象的可视化软件开发工具. Delphi集中了Visual C++和Visual Basic两者的优点:容易上手.功能 ...

  2. Delphi中的容器类(二)

    TStrings类 出于效率的考虑,Delphi并没有象C++和Java那样将字符串定义为类,因此TList本身不能直接存储字符串,而字符串列表又是使用非常广泛的,为此Borland提供了TStrin ...

  3. Delphi中的线程类

    Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...

  4. 探究:如何判断Delphi中的对象指针是否可用

    2019独角兽企业重金招聘Python工程师标准>>> 近日,在网上看到有网友问曰:如何确定一个对象指针是否可用?也就是说,如何确定一个对象指针是否指向一个真正可用的对象实例?其实这 ...

  5. 奇淫怪巧之在Delphi中调用不申明函数

    前一阵子,研究了一段时间的Win32Asm,研究到后来发现Win32的ASM实际上还是和C版的介绍的一样.甚至还封装了一个简版的类似VCL库结构框架的32ASM结构库,不过搞着搞着就没兴趣了,也没继续 ...

  6. Delphi中的指针类型

    首先讲讲指针类型在delphi中是怎么定义的: 指针类型的定义语法 type <指针类型标识符>=^<基类型>: 指针指向动态变量的类型是由^符后的基类型来标识,^符号也就是指 ...

  7. 自己对Delphi中使用正则表达式的研究心得

    在 Delphi 中使用正则表达式, 目前 PerlRegEx 应该是首选, 在此分享一下自己的一些心得体会. 官方网站: http://www.regular-expressions.info/de ...

  8. 关于delphi中的register, pascal, cdecl, stdcall, safecall

    最近用delphi写了个软件.所以特此也转篇文章,以留作记录吧. 1...http://blog.csdn.net/yfy_47/article/details/6572374 注: 使用错误,或者在 ...

  9. Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏

    Delphi中大家在使用 ListView和TreeView时,一般都会使用到Item的Data属性来保存大家自己的内部数据,这个Data的声明如下: property Data: Pointer; ...

最新文章

  1. MySQL系列(二)
  2. 相同的树Python解法
  3. 学习笔记(2)centos7 下安装mysql
  4. 32点亮8个呼吸灯_艾扬格瑜伽32 个经典体式 amp; 2 大呼吸法经典示范图(收藏级)...
  5. 移动web前端开发注意事项
  6. 软考嵌入式系统设计师2013年上午试题总结
  7. python做小游戏之一小迷宫游戏
  8. 直播预约 | 如何通过MLOps解放和提升AI生产力?
  9. web术语chm_笨客户端的20个Web设计行业术语
  10. unity3d 压缩文件夹和压缩文件
  11. 论文《DeepHawkes: Bridging the Gap between Prediction and Understanding of Information Cascades》阅读
  12. uestc 1903
  13. LK32T102单片机 操作GPIO实现 主按钮、矩阵按键 和 蜂鸣器
  14. 【MSP430】MSP430F5529关于ADC12模数转换介绍
  15. BAT 大厂Java 面试题集锦之核心篇附参考答案
  16. 【笔记本维修】【基础知识】【二极管 三极管】
  17. 自动化测试python 成长路线_自动化测试工程师成长路线规划
  18. 猪八戒CEO朱明跃:平台是最难做的生意
  19. Microsoft Office-未响应
  20. 工作之余享受一下天籁之音(千千静听音效插件)

热门文章

  1. 基于SpringBoot的外卖项目(详细开发过程)
  2. Java 正序、逆序排序
  3. 什么是商用密码安全性评估?
  4. 数据结构(c++)学习笔记--二叉树
  5. 【04】HTML5+CSS3:01-HTML5新增标签、多媒体标签、input标签、新增表单属性、CSS3属性选择器、伪元素选择器、2D转换
  6. 部署一个基于ChatGPT的微信聊天机器人以及产生的思考
  7. 联想小新pro16和联想拯救者r9000x的区别 哪个好
  8. 外贸公司怎么通过谷歌地图寻找目标客户?
  9. 计算机毕业设计-艺术展览管理系统
  10. JZ2440 v3.0 linux-3.4.2 busybox1.20.0内核 和 文件系统移植 修改分区大小 yaffs2文件系统补丁 开源资源查找