Windows 10 Universal App SQLite

时间:2015-08-15 07:21:43

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

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

2 个答案:

答案 0 :(得分:4)

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

我发现this sample app在通用应用程序中实现了SQLite。这在Windows 10上为我编译并运行正常,尽管我必须使用我的版本更新对SQLite 3.8.4.3的引用,SQLite 3.8.11.1

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

答案 1 :(得分:0)

如果您正在寻找一步一步的程序,可以查看此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);
        }
    }
}