相关疑难解决方法(0)

IndexedDB的概念问题(关系等)

我正在写一篇关于Web应用程序离线功能的论文.我的任务是通过Web应用程序显示离线存储的可能性,该应用程序具有服务器端关系数据库和客户端与服务器之间的Ajax/JSON流量.我的第一个实现使用了localStorage的方法,将每个Ajax响应保存为值,并将请求URL作为键.该应用程序工作正常.然而,在下一步中,我希望(即论文要求)使用客户端数据库实现更高级的版本.由于服务器维护关系数据库,因此Web SQL数据库将是直观的选择.但是,正如我们所知,该标准已被弃用,我不想使用未来不确定的技术.因此,我想使用IndexedDB来实现客户端数据库逻辑.不幸的是,在网上阅读了大量材料后,我们仍然不知道该如何处理.

我的任务似乎相当简单: 使用IndexedDB在客户端上实现服务器端数据库,以复制曾经从服务器获取的所有数据.这些问题远远不那么简单:

  • 服务器端数据库是关系型的,IndexedDB(或多或少)是面向对象的
  • 没有直观的方法来同步客户端和服务器端数据库
  • 没有直观的方法来实现IndexedDB中使用服务器上的外键和JOIN实现的关系

现在,我有一个概念,我真的害怕开始实施.我考虑过为服务器数据库中的每个表创建一个对象存储,并手动编写不同对象存储中的关系对象.在我的应用程序中,简而言之,管理大学的课程,我有7个对象商店.

我想通过服务器的JSON响应示例演示我的想法(/*这些是注释*/):

{ "course": { /* course object */
    "id":1, 
    "lecturer": { "id":"1", /* lecturer object with many attributes */ },
    "semester": { "id":"1", /* semester object with many attributes */ }, 
    /* more references and attributes */
}}
Run Code Online (Sandbox Code Playgroud)

使用IndexedDB存储数据的算法会将应用于对象存储的每个对象存储在适当的对象存储中,并使用对这些对象的引用替换对象.例如,上面的课程对象在对象库"课程"中看起来如下:

{ "course": { /* course object */
    "id":1, 
    "lecturer": 
    { "reference": { /* reference to the lecturer in the object store 'lecturer' */
        "objectstore":"lecturer",
        "id":"1" }
    },
    "semester":
    { "reference": { …
Run Code Online (Sandbox Code Playgroud)

javascript html5 local-storage web-sql indexeddb

31
推荐指数
1
解决办法
8201
查看次数

在IndexedDB中,有没有办法进行排序复合查询?

说一张桌子有,名字,身份证,年龄,性别,教育等.ID是关键,表格也是姓名,年龄和性别的索引.我需要所有25岁以上的男学生按名字排序.

这在mySQL中很简单:

    SELECT * FROM table WHERE age > 25 AND sex = "M" ORDER BY name
Run Code Online (Sandbox Code Playgroud)

IndexDB允许创建索引并根据该索引对查询进行排序.但它不允许多次查询,如年龄和性别.我发现了一个名为queryIndexedDB(https://github.com/philikon/queryIndexedDB)的小型库,它允许复合查询,但不提供排序结果.

那么有没有办法在使用IndexedDB时进行排序复合查询?

sqlite html5 web-applications client-side indexeddb

31
推荐指数
1
解决办法
1万
查看次数

Javascript:使用多个索引搜索indexeddb

我想从WebSql更改为Indexeddb.但是,如何进行SQL查询

SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com'
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and age = 30
SELECT * FROM customers WHERE ssn = '444-44-4444' and emal = 'bill@bill@company.com' and name = 'Bill'
etc
Run Code Online (Sandbox Code Playgroud)

使用IndexedDB?例如,我在阅读indexedDb 的文档时注意到,所有示例当时只查询一个索引.所以你可以做到

var index = objectStore.index("ssn");
index.get("444-44-4444").onsuccess = function(event) {
     alert("Name is " + event.target.result.name);
};
Run Code Online (Sandbox Code Playgroud)

但我需要同时查询多个索引!

我还发现了一些关于复合索引的有趣帖子,但它们只有在查询复合索引中的所有字段时才有效.

javascript web-sql indexeddb

17
推荐指数
1
解决办法
1万
查看次数