Windows 10通用应用程序SQLite

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

我想知道现在的状态如何。请看这条一周前的评论:http://stackoverflow.com/questions/31733553/sqlite-windows-10-rtm-universal-app#comment51649951_31779999 - Eivind Gussiås Løkseth
谢谢提供的链接!我终于成功在Windows 10通用应用程序中使用https://github.com/doo/SQLite3-WinRT,因为WinJS未定义错误来自我在default.html文件中犯的另一个错误。现在我在将其部署到Windows 10 Mobile时遇到了问题,并在此处提出了新问题:http://stackoverflow.com/questions/32032927/windows-10-universal-javascript-app-sqlite-in-windows-mobile-10 - cloudcrypt
2个回答

5

我曾经尝试在Windows 10上使用https://github.com/doo/SQLite3-WinRT,但是发现VS2015 Community Edition无法加载该项目。每次我尝试加载它时,VS都会挂起,状态栏显示“正在卸载项目”。唯一的解决方法是通过任务管理器将其关闭。

我找到了一个实现SQLite的示例应用程序,该应用程序是通用应用程序。这个应用程序对我来说可以编译和运行在Windows 10上,尽管我不得不将SQLite 3.8.4.3的引用更新为我拥有的版本SQLite 3.8.11.1

  1. 下载并解压缩通用JavaScript SQLite示例
  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 Mobile时也能正常运行!不过,您知道在哪里可以找到SQLite实现的一些文档(可用的javascript方法/类等)吗?谢谢! - cloudcrypt
我认为是没有的。我只是偶然发现它的。我能找到的唯一附加信息是相关的博客文章(在示例中链接)-http://blogs.windows.com/buildingapps/2014/07/02/writing-a-sqlite-wrapper-component-for-universal-windows-apps/ - roryok
是的,那篇博客基本上把它全部解释清楚了。谢谢!如果你会使用我的Win10通用组件版本(非8.1通用),请告诉我,因为我可以将其放在GitHub上。 - cloudcrypt
@cloudcrypt如果你能把你的项目放到GitHub上,对像我这样的其他人来说会很有帮助。我正在为类似的问题而苦恼。谢谢。 - Dr. Atul Tiwari
2
请查看以下链接:https://github.com/cloudcrypt/SQLite-Universal-WinJS-Component 希望它能正常工作,祝您使用愉快! - cloudcrypt
显示剩余2条评论

0

如果您正在寻找逐步操作说明,可以查看此帖子

您可以将其与以下内容一起使用:

  • Windows 10:通用应用平台的SQLite
  • Windows Phone 8.1:Windows Phone 8.1的SQLite
  • Windows 8.1:Windows Runtime(Windows 8.1)的SQLite

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

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);
        }
    }
}

1
原始问题特别涉及Windows Phone上的Javascript。这段代码是C#。 - roryok

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