本文整理自网络,侵删。
SQLite不仅可以把数据库放在硬盘上,还可以放在内存中,经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。
但数据库放在内存中时有如下缺陷:
1、断电或程序崩溃后数据库就会消失,你需要定期Attach到硬盘上备份;
2、在内存中的数据库不能被别的进程访问(因为没名字,以后可能支持),即使在多线程下,也得使用同一句柄;
3、不支持像在硬盘上的读写互斥处理,需要自己加锁。
4、只能本进程使用,其它进程无法使用。
1)FIREDAC创建和使用参数打开一个SQLite内存数据库:// 建立一个内存数据库,存放当前登录信息FDConnection1.Params.Add('DriverID=SQLite');FDConnection1.Params.Add('Database=:memory:');FDConnection1.Open;FDConnection1.ExecSQL('CREATE TABLE Log(Id integer PRIMARY KEY)');// 执行insert语句FDConnection1.ExecSQL('INSERT INTO Log (1)');
2)使用TFDSQLiteBackup将文件数据库转变为内存数据库。示例代码:FDConnection1.DriverName := 'SQLite';FDConnection1.Open;FDSQLiteBackup1.Database := '\\srv\db\data.sdb';FDSQLiteBackup1.DestDatabaseObj := FDConnection1.CliObj;FDSQLiteBackup1.DestMode := smCreate;FDSQLiteBackup1.Backup;
3)ATTACH(附加数据库)例如:FDConnection1.ExecSQL('ATTACH ''c:\hr.sdb'' AS hr');FDConnection1.ExecSQL('ATTACH ''c:\cust.sdb'' AS cust');FDQuery1.Open('select * from 'Orders' o ' +'left join hr.'Employees' e on o.EmployeeID = e.EmployeeID ' +'left join cust.'Customers' c on o.CustomerID = c.CustomerID');注意,firedac把数据库名作为目录名称理解。
4)将SQLITE内存数据同步到文件数据库中。
实现思路如下:
1、创建文件数据库;
2、创建内存数据库(文件数据库、内存数据库的内幕表结构需要一致);
3、在内存数据库中attach文件数据库,这样可以保证文件数据库中的内容在内存数据库中可见;
4、对于insert、select、delete、update操作,在内存数据库中操作;
5、定时将内存数据库中的内容同步到文件数据库。
https://www.cnblogs.com/hnxxcxg/p/6089252.html
相关阅读 >>
Delphi xe7实现获取程序是否已管理员模式运行以及运行的windows用户名
Delphi 双击listbox1内容,数据插入到memo1/synedit1鼠标指定位置
更多相关阅读请进入《Delphi》频道 >>