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