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行数据。

相关推荐
强健的石头19 小时前
django文件对象是什么?
数据库·django·sqlite
Quincy_Freak2 天前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
超级数据查看器3 天前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
TrisighT3 天前
Electron 鸿蒙 PC 上做本地搜索,Fuse.js 比 SQLite 快 6 倍——但我愣是选了最慢的方案
electron·sqlite·harmonyos
大气的小蜜蜂3 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·qt·sqlite
ycydynq3 天前
Django利用中间间 判断页面是否登录,未登录则返回登录页
数据库·django·sqlite
澈2074 天前
QT入门第十一天:数据库编程(上)SQLite入门与增删改查 | 零基础学QT
数据库·qt·sqlite
兵慌码乱15 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
兵慌码乱16 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
伶俜6621 天前
鸿蒙原生应用实战(十八)ArkUI 记账本:SQLite 账单 + 图表统计 + 分类管理
jvm·sqlite·harmonyos