zoukankan      html  css  js  c++  java
  • 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:TESTdelphixe5Testsqllite数据库工具Personal 3

    2.

    有人提到可以使用ADO通过ODBC连接,

    http://blog.csdn.net/zyq5945/article/details/6457741

     

    网上下载了ODBC驱动,见:D:TESTdelphixe5Testsqllitetestodbc,配置好后,

    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:UsershlDesktopaa.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:TESTdelphixe5TestsqllitetestFireDAC

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

  • 相关阅读:
    php留言
    linux系统的初化始配置
    Alertmanager 配置解析
    Prometheus 配置解析
    Prometheus Consul 自动发现
    测试find 命令删除文件速度
    win10 安装wsl2 centos
    kubernetes api 的两种身份认证 以及kubectl生成kubeconfig
    Elasticsearch集群平滑下线data节点
    Fiddler Everywhere 安卓手机抓包配置
  • 原文地址:https://www.cnblogs.com/barryhong/p/3884977.html
Copyright © 2011-2022 走看看