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学习资料汉化中来,有兴趣者可 ...
随机推荐
- RCurl getURL()函数做debug
getURL()函数做获取网页做debug,三步骤 1.首先创建一个对象debugGatherer(),该对象包含三个函数:(update(), value(), reset()); R> de ...
- 10.this关键字
①在类的方法定义中使用的this关键字代表使用该方法的对 象的引用 ②当必须指出当前使用方法的对象是谁时要使用this ③有时使用this处理方法中成员变量和参数重名的情况 ④this可以看做是一个变 ...
- PHP-格式标签
格式控制标签 <font color="" size="" face=""></font> 控制字体:color控 ...
- Volley
Volley 是 Google 推出的轻量级 Android 异步网络请求框架和图片加载框架.在 Google I/O 2013 大会上发布.其适用场景是数据量小,通信频繁的网络操作. 主要特点: ( ...
- 改变spring-servlet.xml名字和默认位置
如何我们在web.xml定义: <servlet> <servlet-name>spring</servlet-name> <servlet-class> ...
- linux nginx 启动脚本
linux nginx 启动脚本 [root@webtest76 ~]# vi /etc/init.d/nginx #!/bin/bash # nginx Startup script for the ...
- mysql删除重复记录,保存Id最小的一条
方法1:1.创建一个临时表,选取需要的数据.2.清空原表.3.临时表数据导入到原表.4.删除临时表.mysql> select * from student;+----+------+| ID ...
- js获取cookie 和 模仿php的&_GET方法
//获取get参数 function _get(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)( ...
- mongodb数据库迁移
如果遇到权限问题,终极解决办法:关掉权限! 如:assertion: 18 { ok: 0.0, errmsg: "auth failed", code: 18 }等错误
- IOS的MVC和MVVM模式简明介绍
iOS中的MVC(Model-View-Controller)将软件系统分为Model.View.Controller三部分,结构图如下: Model: 你的应用本质上是什么(但不是它的展示方式) C ...