DELPHI XE5 与SQLITE
最近一次使用DELPHI做项目是使用DELPHI2009,为了访问本地数据库方便,使用ACCESS数据库,不需要安装驱动,(WINDOWS自带),但是ACCESS数据库的性能确实很糟糕,通过ADO连接,INSERT 1000条数据平均在1.5秒以上。
面前面临一个新的项目,本地数据库是继续用ADO,还是其他,成了一个问题。
近期比较流行的本地数据库是SQLite,想测试下SQLite的性能,和方便程度。
1.
DELPHI 和 SQLITE在度娘上提的最多的是通过ASQLite3DB组件进行连接。
http://www.2cto.com/kf/201010/76781.html
这套组件TSQLiteDatabase类和TSQLiteTable类,通过几个DLL访问SQLITE数据,研究发现TSQLiteTable类和DELPHI原生的TDataSet类完全无关,实在太原始了,无法和DELPHI原生的数据库组件连接,使用起来可能会很麻烦。
无意中发现了一个很好的SQLITE工具:
D:\TEST\delphixe5Test\sqllite\数据库工具\Personal 3
2.
有人提到可以使用ADO通过ODBC连接,
http://blog.csdn.net/zyq5945/article/details/6457741
网上下载了ODBC驱动,见:D:\TEST\delphixe5Test\sqllitetest\odbc,配置好后,
procedure TForm1.Button3Click(Sender: TObject);
var
i: Integer;
b: Long;
begin
ADOConnection2.BeginTrans;
b := getTickCount();
for I := 0 to 1000 do
begin
adoquery2.SQL.Text := 'insert into a(a) values (''中' + Inttostr(i) + ''')';
adoQuery2.ExecSQL;
end;
ADOConnection2.CommitTrans;
Edit1.Text := IntToStr(getTickCount() - b);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOConnection2.ConnectionString := 'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="Driver={SQLite3 ODBC Driver};Database=C:\Users\hl\Desktop\aa.db;NoWCHAR=1;"';
ADOConnection2.Open();
end;
运行效果还可以,平均insert 1000条在0.5秒左右,比ACCESS提高了三倍以上。
但是使用ODBC存在一个问题,就是必须安装ODBC驱动,网上没有找到如何将驱动直接打在我自己的程序安装包里,并且有可能存在部分机器上装不上ODBC导致无法连接本地数据库的问题,最后决定放弃ODBC连接。
3.
有人提到可以通过DBEXPRESS进行连接,折腾了半天,一直提示无法找到sqlite3.dll,找了很久也没找到解决方法,放弃。
4.
正在绝望时,看到http://redboy136.blog.163.com/blog/static/10718843220139206951165/
提到Delphi XE5中的新特性中增加了FireDAC对sqlite的支持。开始研究一下FIREDAC
网上对FIREDAC的介绍不多,还好找到了DELPHI的帮助文件。
测试:
D:\TEST\delphixe5Test\sqllitetest\FireDAC
procedure TForm1.Button1Click(Sender: TObject);
begin
FDConnection1.Params.Clear;
FDConnection1.Params.Add('Database='+ ExtractFilePath(Application.Exename) +'aa.db');
FDConnection1.Params.Add('DriverID=SQLite');
FDConnection1.Connected := True;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: Integer;
b: Long;
begin
FDConnection1.StartTransaction;
try
b := getTickCount();
for I := 0 to 1000 do
begin
FDQuery2.SQL.Text := 'insert into a(a) values (''' + Inttostr(i) + ''')';
FDQuery2.ExecSQL;
end;
FDConnection1.Commit;
except
FDConnection1.Rollback;
raise;
end;
Edit1.Text := IntToStr(getTickCount() - b);
end;
INSERT 1000条竟然不到90毫秒,又无须安装驱动。太完美了。
DELPHI XE5 与SQLITE的更多相关文章
- Delphi XE5 常见问题解答
Delphi XE5 常见问题解答 有关于新即时试用的问题吗?请看看 RAD Studio 即时试用常见问答. 常见问题 什么是 Delphi? Embarcadero? Delphi? XE5 是易 ...
- Delphi XE5中的新增内容
Delphi XE5中的新增内容 Delphi XE5是所有Delphi开发人员的必须备升级,并且是来自Embarcadero的获奖的.多设备应用开发解决方案的最新版本.使用Delphi XE5的新特 ...
- Delphi XE5 支持的Android 版本
Delphi XE5 已经支持Android应用开发. 那XE5支持Android的哪些版本呢?Delphi编译的APP能部署到Gingerbread (2.3.3-2.3.7), Ice Crea ...
- Delphi xe5 手机开发经验(新手级别)
Delphi xe5 手机开发经验(新手级别) http://diybbs.zol.com.cn/1/34037_699.html http://www.delphitop.com/html/jiqi ...
- delphi XE5下安卓开发技巧
delphi XE5下安卓开发技巧 一.手机快捷方式显示中文名称 project->options->Version Info-label(改成需要显示的中文名即可),但是需要安装到安卓手 ...
- DELPHI XE5开发WEB服务器及安卓手机客户端
Xe5开发web服务端和手机客户端 ------------------------------------- Delphi xe5作为最新开发利器,就类似如当年的DELPHI,功能强大,快发速度快, ...
- Delphi XE5 如何与其他版本共存
如果你想使用Delphi诸如XE4.XE3.XE2.XE之类的版本跟Delphi XE5共存的话,在cglm.ini中简单修改两行就行啦. 找到Delphi XE5的安装根目录C:\Program F ...
- Delphi XE5 与其他版本共存
来源于http://www.board4allcz.eu 作者是gateway 如果你想使用Delphi诸如XE4.XE3.XE2.XE之类的版本跟Delphi XE5共存的话,在cglm.ini中简 ...
- Delphi XE5教程12:注释和编译器指示字
内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...
随机推荐
- android中的回调简单认识
首先说一下最抽象的形式--2个类,A类和B类.A类含有1个接口.1个接口变量.(可能含有)1个为接口变量赋值的方法以及1个会使用接口变量的"地方";B类实现A中的接口,(可能)含有 ...
- 2016huasacm暑假集训训练三 G - 还是畅通工程
题目链接:http://acm.hust.edu.cn/vjudge/contest/123674#problem/G 这题和上一道题差不多,还更简单点,直接用prim算法就行,直接贴AC代码: im ...
- 使用Hibernate SQLQuery(转)
原文地址:http://itindex.net/detail/51776-hibernate-sqlquery-sql,重新排了一下版 Hibernate对原生SQL查询的支持和控制是通过SQLQue ...
- ccf模板生成
问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的.例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 而当用户为 Jerr ...
- baiduMap
1.把百度地图定位API(下载地址:http://lbsyun.baidu.com/sdk/download?selected=location),里面的lib福祉到自己的项目中 2,进行相关配置(官 ...
- Unity学习疑问记录之触屏
当将Unity游戏运行到ios或android设备上时,桌面系统中的鼠标左键操作可以自动变为手机屏幕上的触屏操作,但鼠标操作无法实现一些特有的触屏操作,比如多点触屏. 触控对于Android移动设备来 ...
- ThinkPHP 3.2.3 使用 Swift Mailer 邮件系统发送邮件
SwiftMailer 下载地址:https://github.com/swiftmailer/swiftmailer 版本:swiftmailer-5.x 把压缩包解压到 /ThinkPHP/Lib ...
- javascript入门:this的规则与bind的各种风骚用法
javascript的任何函数的作用域中都有一个this变量.理解这个this变量才能正确地编写javascript程序,正确使用javascript的各种功能. this变量是这样确定的: 1 如果 ...
- 「iOS造轮子」之UIButton 用Block响应事件
俗语说 一个不懒的程序员不是好程序员 造轮子,也只是为了以后更好的coding. coding,简易明了的代码更是所有程序员都希望看到的 无论是看自己的代码,还是接手别人的代码 都希望一看都知道这代码 ...
- Spring mvc example
Spring mvc example 1.下载spring源包 spring地址:http://www.springsource.org/download 我下的是spring-framework-3 ...