最近一次使用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. 浅谈WebLogic和Tomcat

    J2ee开发主要是浏览器和服务器进行交互的一种结构.逻辑都是在后台进行处理,然后再把结果传输回给浏览器.可以看出服务器在这种架构是非常重要的. 这几天接触到两种Java的web服务器,做项目用的Tom ...

  2. 复制文件的问题:使用FileInputStream和FileOutputStream实现文件复制

    public class Test{ public static void main(String [] args) { Test t=new Test(); t.upload(); } public ...

  3. 20145205 《Java程序设计》第8周学习总结

    教材学习内容总结 第十五章 通用API 15.1 日志 日志API简介 java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可在标准Java平台使用是其好处.使用日 ...

  4. C语言中定义全局变量

    (1)在C语言的头文件中定义变量出现的问题 最好不要傻嘻嘻的在头文件里定义什么东西.比如全局变量: /*xx头文件*/ #ifndef  _XX_头文件.H #define  _XX_头文件.H in ...

  5. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  6. js无刷新上传文件

    传统的文件上传方式 <form action="" method="POST" enctype="multipart/form-data&quo ...

  7. 展望 2017年商业智能BI 发展的趋势

    在展望2017年商业智能 BI 发展趋势前,我们先来了解一下商业智能 BI 发展的几个重要阶段. 传统 BI 和新型 BI 的分水岭(2013年) 大背景 在2013年以前相当长的一个周期(2005年 ...

  8. 取到 tableview 自定义section header 上的button

    在自定义的组头上,添加了一个button,在点击cell是想取到相应的组头上的button来进行操作时(比如说隐藏.是否响应点击事件等)时,我遇到了取不到所有button的问题,试过了常规的通过vie ...

  9. 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 ...

  10. javascript类型与类型检测

    1.javascript类型: 注:包装对象:如"hello".length实际为js为我们隐式创建了一个String临时对象,去调用该对象的length属性,调用过后再将该临时对 ...