0

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

但是如果我写ROWID号,我可以在safari的inspector中看到,而不是函数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);});

谢谢

4

2 回答 2

2

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

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

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

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

例如,假设数据库之前已经填充过这样的记录 = {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);
}); 
于 2014-05-08T00:17:29.103 回答
1

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

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

于 2014-02-28T19:13:52.413 回答