lazarus开发:提升sqlite数据插入速度

目录

[1 前言](#1 前言)

[2 优化数据容器](#2 优化数据容器)

[3 开启事务插入数据](#3 开启事务插入数据)

[4 其他方面优化](#4 其他方面优化)


1 前言

近期有一个需求是向数据库中插入excel文件中的10万多条数据,接近70个字段。最初整个插入数据时间是大约40分钟,经过优化调整后,大幅优化为大约5分钟。这里简单介绍一下采取的措施。

2 优化数据容器

这里的数据容器是指,数据从外部读入后,插入数据库之前,暂时存放在什么地方。原来是以com方式调用excel程序,打开excel文件,读取数据到stringGrid中。这种方式速度慢,容易出错。现在改用fpsDataset读取excel数据,数据直接保存在数据集中。后面执行数据显示和插入数据到数据库中,直接操作这个数据集就可以了,非常快速高效。

前面介绍过这个fpSpreadSheet这个神器,操作电子表格太方便了。

Delphi 复制代码
    wsDataset := TsWorksheetDataset.create(self);
    wsDataset.FileName := UTF8ToSys(fn); // fn是excel文件名
    wsDataset.Open; 

3 开启事务插入数据

开启事务方式后,插入数据效率有数十倍的提升!lazarus操作sqlite数据库,使用事务的语法如下:

Delphi 复制代码
  DM.SQLTransaction1.EndTransaction;
  DM.SQLTransaction1.StartTransaction;  

  循环开始
  。。。。。。

      sql := 。。。。。。

      try
        DM.SQLite3Conn.ExecuteDirect(sql);
      except
        on E: Exception do
        begin
          showmessage('出错了7: ' + E.ClassName + '/' + E.Message);
          memo1.append(ansiToUtf8(sql));
          memo1.append('插入记录失败,sql语句:');
          dm.SQLTransaction1.RollBack;
          exit;
        end;
      end;   

  。。。。。。
  循环结束

  DM.SQLTransaction1.Commit;

4 其他方面优化

如果数据量特别大,就不需要在程序界面全部显示所有数据,那样太浪费时间,可以只显示100行或者1000行数据。

相关推荐
环能jvav大师4 小时前
基于R语言的统计分析基础:使用SQL语句操作数据集
开发语言·数据库·sql·数据分析·r语言·sqlite
q5673152320 小时前
如何在Django中创建新的模型实例
数据库·python·线性代数·django·sqlite
木木ainiks2 天前
django自用教程
数据库·django·sqlite
你可以自己看2 天前
python中Web开发框架的使用
数据库·python·sqlite
cuisidong19973 天前
django 通过地址访问本地文件
python·django·sqlite
林汐的学习笔记4 天前
SQLite
sqlite
Comar04 天前
数据库sqlite3
数据库·sqlite
镭速4 天前
镭速如何高效使用SQLite数据库高速传输结构化数据文件传输
jvm·数据库·sqlite
q567315234 天前
Metacritic 网站中的游戏开发者和类型信息爬取
数据库·python·线性代数·游戏·sqlite
深蓝海拓5 天前
SQLite的入门级项目学习记录(一)
数据库·sqlite