最近一次使用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的更多相关文章

  1. Delphi XE5 常见问题解答

    Delphi XE5 常见问题解答 有关于新即时试用的问题吗?请看看 RAD Studio 即时试用常见问答. 常见问题 什么是 Delphi? Embarcadero? Delphi? XE5 是易 ...

  2. Delphi XE5中的新增内容

    Delphi XE5中的新增内容 Delphi XE5是所有Delphi开发人员的必须备升级,并且是来自Embarcadero的获奖的.多设备应用开发解决方案的最新版本.使用Delphi XE5的新特 ...

  3. Delphi XE5 支持的Android 版本

    Delphi XE5 已经支持Android应用开发.  那XE5支持Android的哪些版本呢?Delphi编译的APP能部署到Gingerbread (2.3.3-2.3.7), Ice Crea ...

  4. Delphi xe5 手机开发经验(新手级别)

    Delphi xe5 手机开发经验(新手级别) http://diybbs.zol.com.cn/1/34037_699.html http://www.delphitop.com/html/jiqi ...

  5. delphi XE5下安卓开发技巧

    delphi XE5下安卓开发技巧 一.手机快捷方式显示中文名称 project->options->Version Info-label(改成需要显示的中文名即可),但是需要安装到安卓手 ...

  6. DELPHI XE5开发WEB服务器及安卓手机客户端

    Xe5开发web服务端和手机客户端 ------------------------------------- Delphi xe5作为最新开发利器,就类似如当年的DELPHI,功能强大,快发速度快, ...

  7. Delphi XE5 如何与其他版本共存

    如果你想使用Delphi诸如XE4.XE3.XE2.XE之类的版本跟Delphi XE5共存的话,在cglm.ini中简单修改两行就行啦. 找到Delphi XE5的安装根目录C:\Program F ...

  8. Delphi XE5 与其他版本共存

    来源于http://www.board4allcz.eu 作者是gateway 如果你想使用Delphi诸如XE4.XE3.XE2.XE之类的版本跟Delphi XE5共存的话,在cglm.ini中简 ...

  9. Delphi XE5教程12:注释和编译器指示字

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误!也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者可 ...

随机推荐

  1. vb6保存项目到c盘的安装目录

    工程保存在安装目录("C:\Program Files (x86)\Microsoft Visual Studio\VB98\errhandler1.vbp")里. 文件管理器找不 ...

  2. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  3. webrtc初识

    最近由于项目的需求,开始接触了webrtc这个东西.没想到这东西的门槛还是蛮高的,接下来分享一下我所踩过的坑,希望对以后初次接触这个东西的人有所帮助. webrtc官网 第一步当然是看官方主页了(ww ...

  4. mysql慢查询日志分析工具mysqldumpslow

    一.mysqldumpslow为mysql自带,安装后既带有该工具. 二.mysqldumpslow经常使用的参数 -s,是order的顺序 al 平均锁定时间 ar 平均返回记录时间 at 平均查询 ...

  5. js获取上传文件个数 以及名称

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. linux实践之程序破解

    linux实践之程序破解 这次的实践是文件破解,让我们从login可执行文件开始吧! 首先我们执行一下这个可执行程序 ①我们希望在不知道密码的情况下,能够登陆进去.且无论密码是什么,都是提示“on y ...

  7. C++ 在Windows下截取整个屏幕 和 指定句柄窗口的屏幕

    #include <windows.h> #include <stdint.h> #include <stdio.h> void ShootScreen(const ...

  8. 数据库 定义 bit 类型 (true=1,false=0)

    当Sql Server数据库定义 数据 为 bit 类型时, 编写代码时 要用 true or false 赋值. 例如: OffTheShelf  定义类型为  bit 后台赋值时 OffTheSh ...

  9. JAVASE02-Unit09: 多线程基础

    Unit09: 多线程基础 * 线程 * 线程用于并发执行多个任务.感官上像是"同时"执行 *  * 创建线程有两种方式. * 方式一: * 继承线程并重写run方法来定义线程要执 ...

  10. 解决:tomcat部署时deploy location不能显示加载后的路径

    项目总是报错,添了删,删了又添了N次以后,发现添加部署的时候,Deploy Location 没有值了,Deploy Location 没有值在自带的Tomcat上就无法用浏览器浏览(Open in ...