【问题标题】:Qt SQLite database without absolute path没有绝对路径的 Qt SQLite 数据库
【发布时间】:2012-01-23 16:54:29
【问题描述】:

有没有办法在不知道绝对路径的情况下引用database.sqlite文件?

_db = QSqlDatabase::addDatabase("QSQLITE");
_db.setDatabaseName("/the/path/i/dont/know/database.sqlite");
  • 我已经尝试将 database.sqlite 添加到 Resources 文件夹并通过 qrc: 调用它,但显然无法写入资源文件。

  • 我也尝试过使用QApplication::applicationDirPath();,但这会根据用户的操作系统导致不同的路径。例如。它将MyApp.app/Contents/MacOS 附加到实际目录中。

【问题讨论】:

    标签: database qt sqlite resources absolute-path


    【解决方案1】:

    当您使用 SQLite 作为后端创建 QSqlDatabase 时,您有两个选择:

    • 提供绝对路径作为数据库名称
    • 给出一个相对路径:在这种情况下,数据库将保存在二进制文件的目录中。

    所以你必须知道你的数据库的绝对路径。

    编辑

    如果您最初知道数据库的位置,您可以对其进行硬编码(这绝不是明智的),或者您可以创建配置并使用 QSettings 加载它。例如:

    QSettings settings;
    QString dbPath = settings.readValue("DBPath", QString(/*fallback path*/)).toString();
    //do smth with dbPath
    

    进一步了解here

    【讨论】:

    • 例如在我的应用程序中,我从我的配置中构建了一个绝对路径。我们有一个多用户环境,根据用户名我建立一个主目录等等。您对申请有什么要求?
    • 嗯,基本上我想在第一次启动时创建一个 .sqlite 数据库,然后在用户再次启动应用程序时使用该数据库。所以没有什么特别喜欢的:)
    • 感谢您的编辑。但这有什么改变吗?我仍然不能只引用database.sqlite的路径,因为它取决于它执行的位置和执行它的系统?
    • 数据库的路径确实取决于平台,所以最后使用sqlite你必须决定你想要存储数据库的位置
    • @alex 你是怎么得到它的
    【解决方案2】:

    如果您想为每个用户存储数据库,请使用以下命令:

    QDesktopServices::storageLocation(QDesktopServices::DataLocation)
    

    此方法返回可以存储持久应用程序数据的位置。

    更多信息请查看:http://doc.trolltech.com/4.5/qdesktopservices.html#storageLocation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多