【问题标题】:Windows 10 Universal App SQLiteWindows 10 通用应用 SQLite
【发布时间】:2015-11-08 10:39:38
【问题描述】:

我目前正在尝试将工作的 Windows 8 JavaScript 应用程序移植到 Windows 10 UAP 应用程序。在我的 Windows 8 应用程序中,我大量使用了这个 SQLite 包装器和库:https://github.com/doo/SQLite3-WinRT。但是,根据 repo 的自述文件中的设置说明将 SQLite3-WinRT 添加到我的 Windows 10 UAP 应用程序后,我从添加到我的 /js 的 SQLite3.js 源文件中收到“未定义 WinJS”错误应用程序中的目录(它在 Windows 8 应用程序中正常工作的方式)。我在这里做错了什么,或者这个 SQLite3-WinRT 不能与 Win 10 UAP 一起工作,有没有更好的方法在 JavaScript Windows 10 UAP 应用程序中使用 SQLite?非常感谢!

【问题讨论】:

标签: javascript sqlite windows-runtime winjs win-universal-app


【解决方案1】:

我尝试在 Windows 10 上使用https://github.com/doo/SQLite3-WinRT,发现 VS2015 社区版甚至无法加载项目。每次我尝试加载它时,VS 都会挂起并在状态栏中显示“正在卸载项目”。通过任务管理器杀死它是唯一的出路。

我找到了this sample app,它在通用应用程序中实现了 SQLite。这在 Windows 10 上编译并运行良好,尽管我确实必须使用我拥有的版本 SQLite 3.8.11.1 更新对 SQLite 3.8.4.3 的引用

  1. 下载解压Universal JavaScript SQLite Sample
  2. 在 Visual Studio 中打开
  3. 点击“共享应用”项目组
  4. 展开“SQLite.Windows”>“参考”
  5. 删除对“SQLite.WinRT81, Version=3.8.4.3”的引用
  6. 右键单击>“添加引用”
  7. 从 Windows 8.1 > 扩展,选择“SQLite for Windows Runtime (Windows 8.1)
  8. 展开“SQLite.WindowsPhone”>“参考”
  9. 删除对“SQLite.WP81, Version=3.8.5”的引用
  10. 右键单击>“添加引用”
  11. 从 Windows 8.1 > 扩展,选择“SQLite for Windows Runtime (Windows 8.1)
  12. 编译

【讨论】:

  • 非常感谢!我能够成功地将示例应用程序中的通用 8.1 组件移植到在我的本地设备上构建和运行的通用 Windows 10 组件,并且在部署到 Windows 10 移动版时!但是,您知道我在哪里可以找到 SQLite 实现的一些文档(可用的 JavaScript 方法/类等)吗?谢谢!
  • 我认为没有。我只是偶然发现了它。我能找到的唯一附加信息是相关的博客文章(链接在示例中)-blogs.windows.com/buildingapps/2014/07/02/…
  • 是的,那篇博文基本上向我解释了这一切。谢谢!让我知道你是否会使用我的 win10 通用组件版本(非 8.1 通用),因为我可以把它放在 GitHub 上。
  • @cloudcrypt 如果您可以将您的项目放到 github 上,这对像我这样的其他人会有帮助。我正在努力解决类似的问题。谢谢。
  • 你在这里:github.com/cloudcrypt/SQLite-Universal-WinJS-Component希望它有效,享受!
【解决方案2】:

如果您正在寻找分步程序,可以查看此post

你可以使用它:

  • Windows 10:通用应用平台的 SQLite
  • Windows Phone 8.1:适用于 Windows Phone 8.1 的 SQLite
  • Windows 8.1:适用于 Windows 运行时的 SQLite (Windows 8.1)

设置包和扩展后,您可以使用以下方法创建数据库和模型类:

using System.IO;
using System.Threading.Tasks;
using SQLiteModernApp.DataModel;
using SQLite.Net.Async;
using System;
using SQLite.Net;
using SQLite.Net.Platform.WinRT;

namespace SQLiteModernApp.DataAccess
{
    public class DbConnection : IDbConnection
    {
        string dbPath;
        SQLiteAsyncConnection conn;

        public DbConnection()
        {
            dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Sample.sqlite");

            var connectionFactory = new Func<SQLiteConnectionWithLock>(() => new SQLiteConnectionWithLock(new SQLitePlatformWinRT(), new SQLiteConnectionString(dbPath, storeDateTimeAsTicks: false)));
            conn = new SQLiteAsyncConnection(connectionFactory);
        }

        public async Task InitializeDatabase()
        {
            await conn.CreateTableAsync<Department>();
            await conn.CreateTableAsync<Employee>();
            await conn.CreateTableAsync<EmployeeDepartment>();
        }

        public SQLiteAsyncConnection GetAsyncConnection()
        {
            return conn;
        }
    }
}

现在您可以按照示例创建 CRUD:

using System.Collections.Generic;
using System.Threading.Tasks;
using SQLite.Net.Async;
using SQLiteModernApp.DataAccess;
using SQLiteModernApp.DataModel;
using SQLiteNetExtensionsAsync.Extensions;

namespace SQLiteModernApp.Repository
{
    public class EmployeeRepository : IEmployeeRepository
    {
        SQLiteAsyncConnection conn;

        public EmployeeRepository(IDbConnection oIDbConnection)
        {
            conn = oIDbConnection.GetAsyncConnection();
        }

        public async Task InsertEmployeeAsync(Employee employee)
        {
            await conn.InsertOrReplaceWithChildrenAsync(employee);
        }

        public async Task UpdateEmployeeAsync(Employee employee)
        {
            await conn.UpdateWithChildrenAsync(employee);
        }

        public async Task DeleteEmployeeAsync(Employee employee)
        {
            await conn.DeleteAsync(employee);
        }

        public async Task<List<Employee>> SelectAllEmployeesAsync()
        {
            return await conn.GetAllWithChildrenAsync<Employee>();
        }

        public async Task<List<Employee>> SelectEmployeesAsync(string query)
        {
            return await conn.QueryAsync<Employee>(query);
        }
    }
}

【讨论】:

  • 最初的问题是关于 Windows Phone 上的 Javascript。这段代码是 C#
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2015-12-29
  • 2015-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多