• uniDAC使用sqlite3作为 IOS APP 的数据库存在的问题


    前面有写,可以利用uniConnection的ForceCreateDatabase参数,强制建立sqlite本地数据库,

    uniConnection1.SpecificOptions.Values['ForceCreateDatabase'] := 'True';
    当执行uniConnection1.Connect时,如果数据库文件不存在,那么uniDAC会建立一个新的数据库。
     
    完整的代码:
    LocalFile := IncludeTrailingPathDelimiter(System.IOUtils.TPath.GetCachePath)+'exam'; //数据库文件存放位置
    LocalConnection.Database := LocalFile;//设置数据库路径
    LocalConnection.SpecificOptions.Values['ForceCreateDatabase'] := 'True'; //不存在则强行建立
    LocalConnection.Connect;//联接数据库
     
    这段代码,当全新安装app时,没有问题,但如果退出app,再重进app,当执行到Connect方法时,可能会产生错误,无法访问数据库,并且,一但产生,就一直无法联接数据库了,那怕重启手机也不行。
    uniDAC使用sqlite3作为 <wbr>IOS <wbr>APP <wbr>的数据库存在的问题

    做为测试,我这样改代码:
    LocalConnection.Database := LocalFile;//设置数据库路径
    LocalConnection.SpecificOptions.Values['ForceCreateDatabase'] := 'True'; //不存在则强行建立
    LocalConnection.Connect;//联接数据库
    LocalConnection.DisConnect;//断开数据库
    LocalConnection.Connect;//重新联接数据库,这一句可能出错
     
    重新测试上面代码,情况一样:当第二次重联数据库时,如果无法联接,就一直无法联接了,那怕重启app。
     
    对于这个问题的解决方法:
    随app打包空的数据库文件,不利用uniDAC for sqlite的强建数据库功能。
    打包方法:
    1.建空的sqlite数据库
    2.利用delphi的发布功能,如下图:
    uniDAC使用sqlite3作为 <wbr>IOS <wbr>APP <wbr>的数据库存在的问题

    由于我使用的GetCachePath取得的路径,所以,文件的Remote Path为StartUpLibraryCaches
     
    问题得到解决,但还是希望官方能解决这个问题,那我就不用打包空数据库了!
     
    环境说明:
    Delphi 10.1 Berlin update 2
    XCode 8.2.1
    IOS :10.2.1(14D27)
    uniDAC:6.4.16
     
    http://blog.sina.com.cn/s/blog_44fa172f0102whps.html
  • 相关阅读:
    命名规范
    操作文件和目录
    使用本地shadow socks代理
    发送邮件
    sql参数化
    定义常量
    获取嵌套字典值的方法
    通过字符串调用函数
    用字典优化过长的if 语句
    操作文件和目录
  • 原文地址:https://www.cnblogs.com/findumars/p/6480132.html
Copyright © 2020-2023  润新知