SQLite作为一种轻型内嵌数据库,具有占用资源小的特点。当仿真过程数据量较大,利用TableFile难以实现数据操作,使用传统数据库,模型的部署又会变得更加复杂。这时可以使用SQLite存储数据。

SQLite数据库的创建

首先添加SQLite工具,在Home选项卡中选择”Manage Class Library”,找到SQLite,添加。

打开”SQLite”模块,填写SQLite数据文件路径,文件格式可以为txt文件。数据库的创建和表格的生成可由程序控制,生成示例如下:

SQLite.open;
SQLite.exec(“CREATE TABLE Info (SNo TEXT PRIMARY KEY, SName TEXT, Score INTEGER)”);

关闭数据库语句为

SQLite.close;

数据库的写入、读取等操作

通过SQLite模块,可直接通过”SQLite.exec(“command”)”执行SQLite语句。例如:

SQLite.exec(“DELETE FROM Info”)

但是有些语句不适合SQLite.exec()直接运行,比如查询时有数据返回,需要使用SQLite.sql(Result:<table>, SQLString:<string> [,SQLParameter:<any>, …])。例如:

SQLite.sql(Tab2,”SELECT * FROM Info”);

数据写入操作,直接使用”INSERT”语句,写入的效率会变得非常低,所以需要开启数据库的事务,例如:

SQLite.exec(“PRAGMA synchronous = OFF;”);
SQLite.exec(“begin;”);
SQLite.prepare(“INSERT INTO Info (SNo,SName,Score) VALUES (?1,?2,?3)”);
for local WriteNo:=1 to 100000 loop

SQLite.resetStatement;
SQLite.bindInteger(1,WriteNo);
SQLite.bindString(2,sprint(“name”,WriteNo));
SQLite.bindInteger(3,ceil(z_uniform(1,60,100)));
SQLite.step;

next;
SQLite.exec(“commit;”);

SQLite与TableFile效率对比

使用数据库对数据进行操作可以降低数据的处理难度,但是会对程序效率产生一些影响。下面将对比SQLite与TableFile的读写效率,以供参考。

写入:(SQLite采用预编译和事务提升效率,TableFile采用writeRow写入数据)

写入10万条数据:

SQLite     : 0.584s

TableFile : 0.137s

整表读取:(SQLite直接查询,TableFile采用copyRnageTo)

SQLite     : 0.113s

TableFile : 0.031s

查询:(SQLite直接查询,TableFile采用循环查表)

SQLite     : 0.021s

TableFile : 0.007s

测试模型下载SQLiteTest

版本:11 TR3

用法说明:

  • 打开SQLite修改数据文件位置
  • 运行OpenDB
  • 运行相应的测试方法,在Cansole中会显示出运行时间。

发表评论