【问题标题】:Get function in ydn-db not working in safari and all apple devices在 ydn-db 中获取功能在 safari 和所有苹果设备中不起作用
【发布时间】:2014-02-28 15:39:26
【问题描述】:

不确定是 ydn-db 中的错误还是我做错了什么。因此,数据已成功保存在 ydn-db 数据库中,并且 db.values 工作正常,我可以从数据库中获取所有数据。但是,当我只想从 DB 获取一个数据输入时,它在 chrome 中可以正常工作,但在 safari 中,它无法通过 ID 从 DB 获取单个数据。

但是如果我写 ROWID 数字,我可以在 safari 的检查器中看到,而不是函数 get 中的 ID,我可以得到它。

问题是我不知道 ROWID 所以我无法从数据库中获取数据。

那么是YDN-DB的get函数中的错误还是我的一些错误?

这行得通:

db.values('sections').done(function(data) {console.log(data);});

这不适用于 safari 和苹果设备:

db.get('section', sectionID).done(function(data) {console.log(data);});

thnx

【问题讨论】:

    标签: ios safari web-sql ydn-db


    【解决方案1】:

    正如 Kyaw Tun 之前所说,定义 keyPath 是能够在 WebSQL 或 Safari 中检索值的关键。

    我只是想补充一点,每次您希望在 Safari 中创建对数据库的引用时,都需要在数据库架构中指定 keyPath。

    当 ydn 访问 IndexedDB (Chrome) 时,它会创建索引并将您指定的值分配给它,在 websql (Safari) 中,主索引使用不同的值,因此当您打开没有架构的 DB Store 时,Safari 可以仅基于其内部主键进行查询。

    因此,如果您在浏览器关闭后重新打开数据库并且您对数据库的初始引用消失了,您需要使用您的架构重新打开它。

    例如假设数据库之前已像这样填充 record = {id: '586856', message: 'Testing in line key'}; db.put({name: 'section', keyPath: 'id'}, 记录);

    像这样从现有数据库中通过密钥访问记录将在 Chrome 中有效,但在 Safari 中无效。

    var db = new ydn.db.Storage('SectionDB');
    db.get('section', '586856').done(function(data) {
      console.log(data);
    }); 
    

    如果您使用这样的架构引用打开数据库,则可以在 Chrome 和 Safari 中通过密钥访问现有数据库中的记录,

    var schema = {
      stores:[{
        name:'section',
        keyPath:"id"
      }]
    };
    
    
    var db = new ydn.db.Storage('section', schema);
    db.get('section', '586856').done(function(data) {
      console.log(data);
    }); 
    

    【讨论】:

      【解决方案2】:

      使用db.keys 获取密钥列表。您可以使用这些键进行检索。

      音符键是类型敏感的。例如数字 1 和字符串 '1' 是不同的。

      【讨论】:

      • Thnx 但是如何将这个 Rowid 号码与我需要的 ID 连接起来?所以我像这样输入数据库文章和 ID: db.put('articles', objectData, objectData._id );因此,当我使 get 函数在 chrome 中工作但在 safari 中我们有 rowid 时,我可以使用键获取所有 rowid,但我不知道如何将该 rowid 与我的 ID 连接。因此,如果我有 10 篇文章并且我需要一篇 id="10" 的文章,我将如何在 safari 中获得它?我可以使用 db.keys 获取所有 rowid,但我仍然不知道哪个是 ID="10"
      • 请注意,ydn-db API 基于 IndexedDB,并不具备 WebSQL 的所有功能。 ROWID 是 IndexedDB 术语中自动生成的键。所以如果你使用autoIncrement键,主键在ydn-db中的概念和实际实现上等价于ROWID。无法在查询结果中获取ROWID
      • 好吧,谢谢你的时间,最好的解决方案是通过 id 获取一篇文章。如果我输入一些这样的数据: db.put('articles', objectData, objectDataID );
      • 使用主键db.get(objectDataID)。它适用于所有数据库。
      • 我试过但它不会那样工作:) dropbox.com/s/e0dh2t3eb1cwxe0/screen.png 如果我尝试这个 db.get('section', "586856").done(function(data) {console.log(数据);});我明白了:dropbox.com/s/qx9h0k54wuzj2zf/screen2.png 这是野生动物园,在 chrome 中工作正常。
      猜你喜欢
      • 2016-01-09
      • 2014-11-16
      • 2014-10-07
      • 1970-01-01
      • 2014-08-06
      • 2017-08-22
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多