Javascript 如何在浏览器的indexdb中使用where子句等条件

Javascript 如何在浏览器的indexdb中使用where子句等条件,javascript,html,sql,indexeddb,Javascript,Html,Sql,Indexeddb,我使用indexdb,因为它支持所有浏览器。我已成功添加数据并从indexdb获取数据,但我希望使用where子句条件。就像我有产品名称,病原体,疾病,路径,所以我想得到产品名称,比如说Ali,疾病是皮肤的数据。它们是我从不同站点获得的信息,它显示所有记录,并在两个输入字段中提供起始值和结束值 这是我正在使用的代码 <!doctype html> <html> <head> </head> <

我使用indexdb,因为它支持所有浏览器。我已成功添加数据并从indexdb获取数据,但我希望使用where子句条件。就像我有产品名称,病原体,疾病,路径,所以我想得到产品名称,比如说Ali,疾病是皮肤的数据。它们是我从不同站点获得的信息,它显示所有记录,并在两个输入字段中提供起始值和结束值

这是我正在使用的代码

     <!doctype html>
     <html>
     <head>
     </head>
     <body>
     <script>
     var db;

    function indexedDBOk() {
    return "indexedDB" in window;
    }

    document.addEventListener("DOMContentLoaded", function() {

    //No support? Go in the corner and pout.
    if(!indexedDBOk) return;

    var openRequest = indexedDB.open("products",1);
    //var openRequest = indexedDB.open("idarticle_people5",1);


    openRequest.onupgradeneeded = function(e) {
    var thisDB = e.target.result;

    if(!thisDB.objectStoreNames.contains("products")) {
        var os = thisDB.createObjectStore("products", {autoIncrement:true});
        //I want to get by name later
        os.createIndex("name", "name", {unique:false});
        //I want email to be unique
        os.createIndex("pathogen", "pathogen", {unique:false});
        os.createIndex("disease", "disease", {unique:false});
        os.createIndex("route", "route", {unique:false});
    }
    }

    openRequest.onsuccess = function(e) {
    db = e.target.result;

    //Listen for add clicks
    document.querySelector("#addButton").addEventListener("click", addPerson, false);

    //Listen for get clicks
    document.querySelector("#getButton").addEventListener("click", getPerson, false);

    }   

    openRequest.onerror = function(e) {
    //Do something for the error
    }


   },false);


 function addPerson(e) {
 var name = document.querySelector("#name").value;
 var pathogen = document.querySelector("#pathogen").value;
 var disease = document.querySelector("#disease").value;
 var route = document.querySelector("#route").value;


console.log("About to add "+name+"/"+pathogen);

//Get a transaction
//default for OS list is all, default for type is read
var transaction = db.transaction(["products"],"readwrite");
//Ask for the objectStore
var store = transaction.objectStore("products");

//Define a person
var person = {
    name:name,
    pathogen:pathogen,
    disease:disease,
    route:route
}

//Perform the add
var request = store.add(person);

request.onerror = function(e) {
    alert("Sorry, that email address already exists.");
    console.log("Error",e.target.error.name);
    console.dir(e.target);
    //some type of error handler
}

request.onsuccess = function(e) {
    console.log("Woot! Did it");
 }
 }

function getPerson(e) {

var-db;
函数indexedDBOk(){
在窗口中返回“indexedDB”;
}
document.addEventListener(“DOMContentLoaded”,function()){
//没有支持?到角落里撅嘴。
如果(!indexedDBOk)返回;
var openRequest=indexedDB.open(“产品”,1);
//var openRequest=indexedDB.open(“idarticle_people5”,1);
openRequest.onupgradeneeded=函数(e){
var thisDB=e.target.result;
如果(!thisDB.objectStoreNames.contains(“产品”)){
var os=thisDB.createObjectStore(“产品”{autoIncrement:true});
//我以后想直呼其名
createIndex(“name”,“name”,“unique:false});
//我希望电子邮件是独一无二的
createIndex(“病原体”、“病原体”{unique:false});
createIndex(“疾病”、“疾病”{unique:false});
createIndex(“route”,“route”,“unique:false});
}
}
openRequest.onsuccess=函数(e){
db=e.target.result;
//听添加点击
document.querySelector(“添加按钮”).addEventListener(“单击”,addPerson,false);
//收听“获取点击”
document.querySelector(“#getButton”).addEventListener(“单击”,getPerson,false);
}   
openRequest.onerror=函数(e){
//为这个错误做点什么
}
},假);
功能添加人员(e){
var name=document.querySelector(“#name”).value;
var病原体=document.querySelector(“病原体”).value;
var disease=document.querySelector(“#disease”).value;
var route=document.querySelector(“#route”).value;
console.log(“即将添加”+名称+“/”+病原体);
//获得交易
//操作系统列表的默认值为all,类型的默认值为read
var transaction=db.transaction([“产品”],“读写”);
//询问objectStore
var store=transaction.objectStore(“产品”);
//定义一个人
个人变量={
姓名:姓名,,
病原体:病原体,
疾病:疾病,,
路线:路线
}
//执行添加
var请求=存储。添加(个人);
request.onerror=函数(e){
警报(“对不起,该电子邮件地址已存在。”);
log(“Error”,例如target.Error.name);
console.dir(e.target);
//某种类型的错误处理程序
}
request.onsuccess=函数(e){
console.log(“Woot!做到了”);
}
}
功能getPerson(e){
var name=document.querySelector(“#nameSearch”).value

var endname=document.querySelector(“#diseaseSearch”).value;
如果(name==”&&endname==”)返回;
var transaction=db.transaction([“产品”],“只读”);
var store=transaction.objectStore(“产品”);
var索引=存储索引(“名称”);
//根据我们所做的类型确定范围
var范围;
如果(名称!=“”&&endname!=“”){
range=IDBKeyRange.bound(名称,endname);
}else if(name==“”){
range=IDBKeyRange.upperBound(endname);
}否则{
range=IDBKeyRange.lowerBound(名称);
}
var s=“”;
index.openCursor(范围).onsuccess=函数(e){
var cursor=e.target.result;
如果(光标){
s+=“键”+光标。键+””;
for(cursor.value中的变量字段){
s+=字段+“=”+光标。值[字段]+“
”; } s+=“

”; cursor.continue(); } document.querySelector(“#status”).innerHTML=s; } }



添加数据



点名


您可以使用三个参数尝试以下步骤:

  • 数据库ID
  • tableid-存储名称
  • 回调函数,返回选定数据的数组
  • cond-条件函数。对于ok记录返回true,对于其他记录返回false
代码如下:

function selectFromTable (databaseid, tableid, cb, cond) {
    var request = window.indexedDB.open(databaseid);
    request.onsuccess = function(event) {
        var res = [];
        var ixdb = event.target.result;
        var tx = ixdb.transaction([tableid]);
        var store = tx.objectStore(tableid);
        var cur = store.openCursor();
        cur.onblocked = function(event) {
    }
    cur.onerror = function(event) {
    }
    cur.onsuccess = function(event) {
        var cursor = event.target.result;
        if(cursor) {
            if(cond(cursor.value) ) res.push(cursor.value);
            cursor.continue();
        } else {
            ixdb.close();
            cb(res);
        }
    }
}       
尝试使用,并从中了解其用法。 您需要包含所有3个JS文件才能开始

function selectFromTable (databaseid, tableid, cb, cond) {
    var request = window.indexedDB.open(databaseid);
    request.onsuccess = function(event) {
        var res = [];
        var ixdb = event.target.result;
        var tx = ixdb.transaction([tableid]);
        var store = tx.objectStore(tableid);
        var cur = store.openCursor();
        cur.onblocked = function(event) {
    }
    cur.onerror = function(event) {
    }
    cur.onsuccess = function(event) {
        var cursor = event.target.result;
        if(cursor) {
            if(cond(cursor.value) ) res.push(cursor.value);
            cursor.continue();
        } else {
            ixdb.close();
            cb(res);
        }
    }
}