DELPHI XE5 与SQLITE

最近一次使用DELPHI作项目是使用DELPHI2009,为了访问本地数据库方便,使用ACCESS数据库,不须要安装驱动,(WINDOWS自带),可是ACCESS数据库的性能确实很糟糕,经过ADO链接,INSERT 1000条数据平均在1.5秒以上。html

面前面临一个新的项目,本地数据库是继续用ADO,仍是其余,成了一个问题。sql

近期比较流行的本地数据库是SQLite,想测试下SQLite的性能,和方便程度。数据库

1.ide

DELPHI 和 SQLITE在度娘上提的最多的是经过ASQLite3DB组件进行链接。工具

http://www.2cto.com/kf/201010/76781.html性能

这套组件TSQLiteDatabase类和TSQLiteTable类,经过几个DLL访问SQLITE数据,研究发现TSQLiteTable类和DELPHI原生的TDataSet类彻底无关,实在太原始了,没法和DELPHI原生的数据库组件链接,使用起来可能会很麻烦。测试

无心中发现了一个很好的SQLITE工具:.net

D:\TEST\delphixe5Test\sqllite\数据库工具\Personal 3orm

2.sqlite

有人提到可使用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

image

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毫秒,又无须安装驱动。太完美了。

相关文章
相关标签/搜索