【问题标题】:Using SQLite with WinRT将 SQLite 与 WinRT 一起使用
【发布时间】:2011-12-06 11:00:32
【问题描述】:

我正在开发一个 Metro ui 应用程序,我想将 SQLite 用于一些内部数据而不是 JET,以便利用一些已经编写的代码。

但是,当我尝试使用 sqlite3_open 打开数据库时,它不起作用。我收到一条错误消息,提示无法打开数据库。

我相信 SQLite 使用的某些 API 不能用于 Metro 风格的应用程序。

有人可以帮我解决这个问题吗?至少告诉我如何识别应该移植哪些api?

【问题讨论】:

  • sqlite3_open() 只有在您无法创建传递它的文件时才会失败。您是否具有在您提供的位置在磁盘上创建文件的适当权限?
  • 查看 windows 事件日志以获取更多信息。

标签: c++ sqlite porting windows-runtime microsoft-metro


【解决方案1】:

我没有在 WinRT 中尝试过 sqllite,但我认为它应该可以工作。最有可能的原因是您对尝试打开的文件没有正确的权限。检查以确保您可以使用 fopen() 之类的简单 API 打开文件。如果失败,那就是权限问题。您需要将数据库放在您的应用程序拥有自然权限的目录中。例如,它不能在用户的文档文件夹中。

【讨论】:

  • 嗨史蒂夫,你是对的。这是一个权限问题,可以使用 GetLastError 看到。但是,我没有弄清楚如何解决权限问题。应用程序清单已配置好权限。即使在用户文件夹中我也无法打开文件。
【解决方案2】:

尝试在本地文件夹中打开数据库。这是一个有效的包装器:http://sqlwinrt.codeplex.com/

【讨论】:

    【解决方案3】:

    这段代码应该可以工作:

    auto localAppDataParh = Windows::Storage::ApplicationData::Current->LocalFolder->Path;
    std::wstring path( localAppDataParh->Data() );
    path += L"\\sample.db";
    sqlite3* db;
    int rc = sqlite3_open16( path.c_str(), &db);
    

    我认为 SQLite 使用的某些 API 不能用于 Metro 风格的应用程序。

    可能有效(至少在预览版中),但不允许。 Windows App Cert Kit 说:

    错误:此应用程序未通过支持的 API 检查。 此应用程序类型不支持 kernel32.dll 中的 API CreateFileA。 此应用程序类型不支持 kernel32.dll 中的 API CreateFileW。 此应用程序类型不支持 kernel32.dll 中的 API DeleteFileA。 : :

    【讨论】:

    • 效果很好。尽管没有在 Metro 应用程序的 API 中列出,但此函数已编译。 (他们列出了 CreateFile2)
    • 请注意,除了编译之外,您还需要通过认证才能在 Windows 应用商店中发布应用程序 - 使用这些 API 将无法通过该认证。 Dev Preview 实际上附带了您可以用来自己运行测试的工具,它还会将这些功能标记为禁止使用。
    【解决方案4】:

    试试这个(仅适用于 UTF-8 数据库文件名):

    int ret = Sqlite3.sqlite3_open_v2("qq.db", out db, 1, "");
    

    更多详情请见sqlite.org

    【讨论】:

      【解决方案5】:

      刚刚发布了一个新的 WinRT SQLite3 变体,它与 Windows 应用商店指南兼容。见https://github.com/doo/SQLite3-WinRT

      【讨论】:

      • SQLite 本身现在与 WinRT 兼容,自 v3.7.13 起。
      • 是的,最后。它不附带 WinRT 组件,但 JS 包装器/测试 ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      相关资源
      最近更新 更多