DELPHI XE5 與SQLITE

來源:互聯網
上載者:User

標籤:des   style   blog   http   使用   os   io   檔案   

最近一次使用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毫秒,又無須安裝驅動。太完美了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.