当我的应用程序首次运行时使用IndexedDB,我用一些数据填充它,我想确保在创建数据库和表时它们不存在。
我可以查询表的长度以查看它是否包含 JavaScript 中的数据吗?
我们可以使用 IndexDB 的 objectStoreNames 属性来检查是否存在 ObjectStore。
var db_object, object_store;
if( !db.objectStoreNames.contains(currentobjectstore) )
{
db_object = i_db.createObjectStore(currentobjectstore, {autoIncrement:true} );
object_store = db.transaction(currentobjectstore, 'readwrite').objectStore(currentobjectstore);
} else {
object_store = db.transaction(currentobjectstore, 'readwrite').objectStore(currentobjectstore);
}
最好的方法是尝试在 try catch 块中打开对象存储。它也是同步的。如果出现错误,您可以创建商店,例如:
var store;
try {
store = request.transaction.objectStore('yourStore');
}
catch(e) {
store = db.createObjectStore('yourStore');
}
您可以使用 objectStore.count(( 函数,但我建议存储某种元数据,这些数据会说您的本地数据库已初始化。否则,您可以在数据创建过程中重新加载页面,并且永远不会将数据与远程数据完全同步。
如果具有指定名称的数据库不存在,则创建数据库,否则将打开该数据库
例如。var request = indexedDB.open("DataTbl");
它将打开它并检查表中的内容是否已经存在,然后您可以创建一个 xyz 对象存储并在其中存储一些键/值标志对,表示插入成功,并在每次重新加载页面时检查它。
您也可以在尝试计数时给出由@toske指定的计数功能
裁判:
http://www.ibm.com/developerworks/library/wa-indexeddb/
http://www.w3.org/TR/IndexedDB/