• FIREDAC操作SQLITE内存数据库


    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 := '\srvdbdata.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、定时将内存数据库中的内容同步到文件数据库。

  • 相关阅读:
    ftp上传下载
    阿里云轻量服务器价格及轻量与ECS服务器区别比较
    找工作
    程序员的精力管理
    应届生如何笔试面试
    java重点总结(一)
    真是面试题汇总(二)
    真实笔试题汇总(一)
    真实面试问题汇总(一)
    Java后端面试准备
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/6089252.html
Copyright © 2020-2023  润新知