• Qt5 开发 iOS 应用之访问 SQLite 数据库


    开发环境:

    macOS 10.12.1
    Xcode 8.1
    Qt 5.8
    iPhone 6S+iOS 10.1.1
     
    源代码:
    我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10、Android、macOS 下正常运行,但是在苹果手机上报错。
    QSqlDatabase db;
    db.setDatabaseName("farmer.db"); // 创建数据库
     
    问题:
    在模拟器上可以正常访问 SQLite 数据库,但是在真机上不行,提示如下错误:
    QSqlDatabasePrivate::database: unable to open database: "out of memory Error opening database"
     
    解决方法:
    1、因为我对苹果的开发环境一无所知,只能使用百度大法,初步确认是访问权限的问题,我从这里了解了 iOS 的沙盒目录结构:http://blog.csdn.net/iunion/article/details/46889073
    于是我修改了下代码,直接在 Documents 目录生成数据库文件,还是出错。
    db.setDatabaseName("../Documents/farmer.db");
     // 创建数据库
    2、继续百度出来的建议是把已经生成好的数据库文件直接部署到应用程序中,然后用代码拷贝到 Documents 目录下。
    于是 Qt 编译完之后,我用 Xcode 打开项目,把数据库文件 farmer.db 加到 Resources 中,
    这样部署到真机上之后,确实有 farmer.db 文件了,我使用 QDir::currentPath() 获取应用的路径,然后
     
    QStringdestFile=QDir::currentPath()+"/Documents/farmer.db";
    QFile::copy("farmer.db", destFile);
    复制文件时报错,又换了 QCoreApplication::applicationDirPath() 获取应用的路径,也不行。这两个函数获取的路径是一样的。这个路径不是我需要的路径。
    3、终于找到了合适的方法,应该使用 QDir::homePath() ,参考了:http://www.qtcn.org/bbs/read-htm-tid-60506-fpage-2.html
    这样程序就顺利的运行起来了。
    4、是不是也可以在  Documents 目录下直接生成数据库文件呢?试验了一下,是可以的,这样就不用再打包数据库和拷贝文件了。
    5、另外,再善后一下,为了让程序跨平台,对不同的操作系统分别处理,iOS 系统中,数据库文件放到 Documents 目录,其他系统直接放到程序目录下。
         QString destFile = "farmer.db";
    #ifdef Q_OS_IOS
        qDebug("操作系统:iOS");
        destFile = QDir::homePath() + "/Documents/farmer.db";
    #else
        qDebug("操作系统:非 iOS");
    #endif 
     
    解决这个问题,花费了我1天半的时间。记录一下,坚持每天进步一点点。





  • 相关阅读:
    HDU 2100 LoveKey
    HDU 2111 Saving HDU
    HDU 2132 An easy problem
    PAT 甲级 1081 Rational Sum (数据不严谨 点名批评)
    LWIP内存管理
    LWIP带UCOS操作系统移植
    LWIP协议栈2-
    LWIP协议栈1
    掌握所有IO口的外部中断
    熟悉相关电路,控制I/O口,且配置相关参数,LED,光敏,74LS164数码管
  • 原文地址:https://www.cnblogs.com/sdsunjing/p/6074890.html
Copyright © 2020-2023  润新知