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学习资料汉化中来,有兴趣者可 ...
随机推荐
- 浅谈WebLogic和Tomcat
J2ee开发主要是浏览器和服务器进行交互的一种结构.逻辑都是在后台进行处理,然后再把结果传输回给浏览器.可以看出服务器在这种架构是非常重要的. 这几天接触到两种Java的web服务器,做项目用的Tom ...
- 复制文件的问题:使用FileInputStream和FileOutputStream实现文件复制
public class Test{ public static void main(String [] args) { Test t=new Test(); t.upload(); } public ...
- 20145205 《Java程序设计》第8周学习总结
教材学习内容总结 第十五章 通用API 15.1 日志 日志API简介 java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可在标准Java平台使用是其好处.使用日 ...
- C语言中定义全局变量
(1)在C语言的头文件中定义变量出现的问题 最好不要傻嘻嘻的在头文件里定义什么东西.比如全局变量: /*xx头文件*/ #ifndef _XX_头文件.H #define _XX_头文件.H in ...
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- js无刷新上传文件
传统的文件上传方式 <form action="" method="POST" enctype="multipart/form-data&quo ...
- 展望 2017年商业智能BI 发展的趋势
在展望2017年商业智能 BI 发展趋势前,我们先来了解一下商业智能 BI 发展的几个重要阶段. 传统 BI 和新型 BI 的分水岭(2013年) 大背景 在2013年以前相当长的一个周期(2005年 ...
- 取到 tableview 自定义section header 上的button
在自定义的组头上,添加了一个button,在点击cell是想取到相应的组头上的button来进行操作时(比如说隐藏.是否响应点击事件等)时,我遇到了取不到所有button的问题,试过了常规的通过vie ...
- Magento Connector: Error: Please check for sufficient write file permissions
请确保下面的文件是可写的: /path/to/your/magento-install/path/to/your/magento-install/downloader/path/to/your/mag ...
- javascript类型与类型检测
1.javascript类型: 注:包装对象:如"hello".length实际为js为我们隐式创建了一个String临时对象,去调用该对象的length属性,调用过后再将该临时对 ...