使用Qt SQLite数据库而不是绝对路径

4
有没有一种方法可以在不知道绝对路径的情况下引用database.sqlite文件?
_db = QSqlDatabase::addDatabase("QSQLITE");
_db.setDatabaseName("/the/path/i/dont/know/database.sqlite");
  • 我已经尝试将database.sqlite添加到资源文件夹并通过qrc:调用,但显然无法向资源文件写入。

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

2个回答

2

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

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

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

编辑

如果你最初知道数据库应该位于哪里,你可以硬编码它(这不是明智的做法),或者你可以创建一个配置并使用QSettings加载它。例如:

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

请看更多关于it技术的内容,请点击这里

例如,在我的应用程序中,我从配置中构建绝对路径。我们有一个多用户环境,根据用户名构建主目录等。您的应用程序有哪些要求? - Neox
基本上,我想在第一次启动时创建一个 .sqlite 数据库,然后每当用户再次启动应用程序时都使用该数据库。所以这并不是什么高级操作 :) - alex
谢谢您的编辑。但这改变了什么吗?我仍然不能只引用到 database.sqlite 的路径,因为它取决于执行它的位置和系统。 - alex
数据库的路径取决于平台,因此最终在使用sqlite时,您必须决定要将数据库存储在哪里。 - Neox
@alex,你是怎么弄到它的?它正常工作吗?你有什么办法可以获取它吗?我遇到了和你一样的问题。:( - Brian

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接