<html> <head> <title>Teste IndexedDB</title> </head> <body> <script> window.onload = function(){ // http://www.w3.org/TR/IndexedDB/ // https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB // http://www.html5rocks.com/pt/tutorials/indexeddb/todo/ /* Lógica segundo o livro HTML5: - Iniciar uma transação. - Fazer a requisição para realizar uma operação com o banco, por exemplo, adicionar ou requisitar um dado armazenado. - Aguardar a finalização e resultado da requisição monitorando o apropriado evento do DOM. - Manipular o resultado da requisição. */ // - - - - - - - - - - // // CRIAR BANCO DE DADOS // // - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); // Se não existe cria request.onupgradeneeded = function() { alert("banco de dados precisa ser criado"); // The database did not previously exist, so create object stores and indexes. // mapeia banco de dados var db = request.result; // cria objeto (tabela) var store = db.createObjectStore("books", {keyPath: "isbn"}); // Chave primaria isbn // cria indices para busca var titleIndex = store.createIndex("by_title", "title", {unique: true}); // Chave unica title var authorIndex = store.createIndex("by_author", "author"); // Chave author // Populate with initial data. store.put({title: "Quarry Memories", author: "Fred", isbn2: 123456}); // Dados armazenados estilo JSON store.put({title: "Water Buffaloes", author: "Fred", isbn2: 234567}); store.put({title: "Bedrock Nights", author: "Barney", isbn2: 345678}); alert("Dados iniciais inserido"); db.close(); }; request.onsuccess = function(){ alert("banco de dados aberto (ja criado)"); var db = request.result; db.close; } */ // - - - - - - - - - - - - - // // INSERIR NO BANCO DE DADOS // // - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); // Se já existe faz mapeamento para variavel request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação de leitura e escrita var tx = db.transaction("books", "readwrite"); // seleciona objeto var store = tx.objectStore("books"); // Popula banco de dados store.put({title: "Livro1", author: "Silvio", isbn: 123}); store.put({title: "Livro2", author: "Silvio", isbn: 1234}); store.put({title: "Livro3", author: "Silvio", isbn: 12345}); tx.oncomplete = function() { // All requests have succeeded and the transaction has committed. alert("Dados inseridos"); }; db.close(); }; */ // - - - - - - - - - - - - - - // // CONSULTAR NO BANCO DE DADOS (by_title) // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação de leitura var tx = db.transaction("books", "readonly"); // Seleciona objeto var store = tx.objectStore("books"); // Seleciona indice para pesquisa var index = store.index("by_title"); // Consulta o objetos cuja o title é Livro1 var request2 = index.get("Livro1"); // Case sensitive request2.onsuccess = function() { var matching = request2.result; if (matching !== undefined) { // A match was found. console.log(matching.isbn, matching.title, matching.author); } else { // No match was found. console.log(null); } }; db.close(); } */ // - - - - - - - - - - - - - - // // CONSULTAR NO BANCO DE DADOS (by_author) // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação de leitura var tx = db.transaction("books", "readonly"); // Seleciona objeto var store = tx.objectStore("books"); // Seleciona indice para pesquisa var index = store.index("by_author"); // Consulta todos os objetos cuja o author é silvio var request2 = index.openCursor(IDBKeyRange.only("Silvio")); // Case sensitive request2.onsuccess = function() { var cursor = request2.result; if (cursor) { // Called for each matching record. console.log(cursor.value.isbn, cursor.value.title, cursor.value.author); cursor.continue(); // Anda com o ponteiro } else { // No more matching records. console.log(null); } }; db.close(); } */ // - - - - - - - - - - - - - - // // INSERIR NO BANCO DE DADOS // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação de leitura e escrita var tx = db.transaction("books", "readwrite"); // Seleciona objeto var store = tx.objectStore("books"); // Insere novo objeto var request2 = store.put({title: "Water Buffaloes", author: "Slate", isbn: 987654}); request2.onerror = function() { // The uniqueness constraint of the "by_title" index failed. console.log(request2.error); // Could call request.preventDefault() to prevent the transaction from aborting. }; tx.onabort = function() { // Otherwise the transaction will automatically abort due the failed request. console.log(tx.error); }; db.close(); } */ // - - - - - - - - - - - - - - // // ATUALIZAR BANCO DE DADOS // // - - - - - - - - - - - - - - // /* var request = indexedDB.open("library", 3); // Request version 3. request.onupgradeneeded = function(event) { var db = request.result; if (event.oldVersion < 1) { // Version 1 is the first version of the database. var store = db.createObjectStore("books", {keyPath: "isbn"}); var titleIndex = store.createIndex("by_title", "title", {unique: true}); var authorIndex = store.createIndex("by_author", "author"); } if (event.oldVersion < 2) { // Version 2 introduces a new index of books by year. var bookStore = request.transaction.objectStore("books"); var yearIndex = bookStore.createIndex("by_year", "year"); } if (event.oldVersion < 3) { // Version 3 introduces a new object store for magazines with two indexes. var magazines = db.createObjectStore("magazines"); var publisherIndex = magazines.createIndex("by_publisher", "publisher"); var frequencyIndex = magazines.createIndex("by_frequency", "frequency"); } }; request.onsuccess = function() { db = request.result; // db.version will be 3. }; */ // - - - - - - - - - - - - - - // // INSERIR COM AUTOINCREMENT // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open("library6"); // Se não existe cria request.onupgradeneeded = function() { alert("banco de dados precisa ser criado"); // The database did not previously exist, so create object stores and indexes. // mapeia banco de dados var db = request.result; store1 = db.createObjectStore("store1", { autoIncrement: true }); store1.put("a"); // Will get key 1 store2 = db.createObjectStore("store2", { autoIncrement: true }); store2.put("a"); // Will get key 1 store1.put("b"); // Will get key 2 store2.put("b"); // Will get key 2 db.close(); } request.onsuccess = function(){ alert("banco de dados aberto (ja criado)"); var db = request.result; db.close; } */ // - - - - - - - - - - - - - - // // APAGAR REGISTRO // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open("library10"); // Se não existe cria request.onupgradeneeded = function() { alert("banco de dados precisa ser criado"); // The database did not previously exist, so create object stores and indexes. // mapeia banco de dados var db = request.result; store = db.createObjectStore("store1", { autoIncrement: true }); store.put("a"); // Will get key 1 store.delete(1); store.put("b"); // Will get key 2 store.clear(); store.put("c"); // Will get key 3 store.delete(IDBKeyRange.lowerBound(0)); store.put("d"); // Will get key 4 db.close(); } request.onsuccess = function(){ alert("banco de dados aberto (ja criado)"); var db = request.result; db.close; } */ // - - - - - - - - - - - - - - // // INSERIR REGISTRO AUTOINCREMENT COM CHAVE // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open("library11"); // Se não existe cria request.onupgradeneeded = function() { alert("banco de dados precisa ser criado"); // The database did not previously exist, so create object stores and indexes. // mapeia banco de dados var db = request.result; store = db.createObjectStore("store1", { autoIncrement: true }); store.put("a"); // Will get key 1 store.put("b", 3); // Will use key 3 store.put("c"); // Will get key 4 store.put("d", -10); // Will use key -10 store.put("e"); // Will get key 5 store.put("f", 6.00001); // Will use key 6.0001 store.put("g"); // Will get key 7 store.put("f", 8.9999); // Will use key 8.9999 store.put("g"); // Will get key 9 store.put("h", "foo"); // Will use key "foo" store.put("i"); // Will get key 10 store.put("j", [1000]); // Will use key [1000] store.put("k"); // Will get key 11 db.close(); } request.onsuccess = function(){ alert("banco de dados aberto (ja criado)"); var db = request.result; db.close; } */ // - - - - - - - - - - - - - - // // ALTERAR NO BANCO DE DADOS // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação de leitura e escrita var tx = db.transaction("books", "readwrite"); // Seleciona objeto var store = tx.objectStore("books"); // Seleciona indice para pesquisa var index = store.index("by_title"); // Consulta o objetos cuja o title é Livro1 var request2 = index.get("Livro1"); // Case sensitive request2.onsuccess = function() { var data = request2.result; if (data !== undefined) { data.title = "Livro10"; console.log(data); // Put this updated object back into the database. var requestUpdate = store.put(data); //var requestUpdate = store.put(data,key); requestUpdate.onerror = function () { // Do something with the error alert("Erro alterar"); }; requestUpdate.onsuccess = function () { // Success - the data is updated! alert("Dados alterados"); }; }else{ alert("Nao encontrado"); } } db.close(); } */ // - - - - - - - - - - - - - - // // Lista todos // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação e seleciona objeto var store = db.transaction("books").objectStore("books"); // Chave default //var store = db.transaction("books").objectStore("books").index("by_author"); // Chave author //Consulta todos os objetos e armazena resultado em event //store.openCursor(IDBKeyRange.only("Silvio")).onsuccess = function(event){ // Filtra pela chave store.openCursor().onsuccess = function(event){ // consulta resultado do event var cursor = event.target.result; if(cursor){ console.log(cursor.key + " | " + cursor.value.isbn + " " + cursor.value.title + " " + cursor.value.author); cursor.continue(); }else{ alert("No more entries!"); } } db.close(); } */ // - - - - - - - - - - - - - - // // Lista todos e armazena em array // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); var arrayObjetos = []; // Inicia uma transação e seleciona objeto var store = db.transaction("books").objectStore("books"); // Chave default //Consulta todos os objetos e armazena resultado em event store.openCursor().onsuccess = function(event){ // consulta resultado do event var cursor = event.target.result; if(cursor){ arrayObjetos.push(cursor.value); cursor.continue(); }else{ console.log(arrayObjetos); console.log(arrayObjetos.length); console.log(arrayObjetos[0]); } } db.close(); } */ // - - - - - - - - - - - - - - // // Lista todos com indice // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação e seleciona objeto var store = db.transaction("books").objectStore("books").index("by_author"); // Chave author // Only match "Silvio" var singleKeyRange = IDBKeyRange.only("Silvio"); // Match anything past "Silvio", including "Silvio" var lowerBoundKeyRange = IDBKeyRange.lowerBound("Silvio"); // Match anything past "Silvio", but don't include "Silvio" var lowerBoundOpenKeyRange = IDBKeyRange.lowerBound("Silvio", true); // Match anything up to, but not including, "Silvio" var upperBoundOpenKeyRange = IDBKeyRange.upperBound("Silvio", true); // Match anything between "Fred" and "Silvio", but not including "Silvio" var boundKeyRange = IDBKeyRange.bound("Fred", "Silvio", false, true); //Search for strings that start with X ( SQL LIKE 'prefix%' ) var boundKeyRange = IDBKeyRange.bound(prefix, prefix + '\uffff', false, false) /* http://www.codeproject.com/Articles/744986/How-to-do-some-magic-with-indexedDB IndexedDB is out-of-the-box only capable of doing the following search operations: - IDBKeyRange.only() - exact match (case sensitive!) - IDBKeyRange.bound() - Find all objects where key is within given range - IDBKeyRange.upperBound() - Find all objects where key is lower than given key - IDBKeyRange.lowerBound() - Find all objects where key is greater than given key As you can see, above, there seems to be no way of doing things like: - Case insensitive searh - Find all objects where key is any of ("a", "b", "c" or "d") (SQL 'IN') - Find keys that contains a given substring (SQL LIKE) - Logical OR or AND - Etc... ( the list could be long...) */ //Consulta todos os objetos e armazena resultado em event store.openCursor(singleKeyRange).onsuccess = function(event){ // Filtra pela chave //store.openCursor(singleKeyRange, "prev").onsuccess = function(event){ // Filtra pela chave e ordem decrescente //store.openCursor(singleKeyRange, "nextunique").onsuccess = function(event){ // Filtra pela chave e unico (distinct) // consulta resultado do event var cursor = event.target.result; if(cursor){ console.log(cursor.key + " | " + cursor.value.isbn + " " + cursor.value.title + " " + cursor.value.author); cursor.continue(); }else{ alert("No more entries!"); } } db.close(); } */ // - - - - - - - - - - - - - - // // Lista todos de varios objetos // // - - - - - - - - - - - - - - // /* // Abrir banco de dados var request = indexedDB.open('library6'); request.onsuccess = function() { // mapeia banco de dados db = request.result; alert("banco de dados aberto"); // Inicia uma transação de leitura var tx = db.transaction(["store1","store2"], 'readonly'); // Seleciona objeto var store1 = tx.objectStore("store1"); //Consulta todos os objetos e armazena resultado em event store1.openCursor().onsuccess = function(event){ // consulta resultado do event var cursor = event.target.result; if(cursor){ console.log(cursor.key + " | " + cursor.value); cursor.continue(); }else{ alert("No more entries!"); } } // Seleciona objeto var store2 = tx.objectStore("store2"); //Consulta todos os objetos e armazena resultado em event store2.openCursor().onsuccess = function(event){ // consulta resultado do event var cursor = event.target.result; if(cursor){ console.log(cursor.key + " | " + cursor.value); cursor.continue(); }else{ alert("No more entries!"); } } db.close(); } */ // - - - - - - - - - - - - - - // // Apagar objetos // // - - - - - - - - - - - - - - // /* var request = indexedDB.open('library20',2); // Se não existe cria request.onupgradeneeded = function(event) { alert("banco de dados precisa ser criado"); // mapeia banco de dados var db = request.result; if(event.oldVersion < 1){ var store = db.createObjectStore("books1"); var store = db.createObjectStore("books2"); var store = db.createObjectStore("books3"); var store = db.createObjectStore("books4"); var store = db.createObjectStore("books5"); } if(event.oldVersion < 2){ db.deleteObjectStore("books1"); db.deleteObjectStore("books2"); db.deleteObjectStore("books3"); } db.close; } request.onsuccess = function(){ alert("banco de dados aberto (ja criado)"); var db = request.result; db.close; } */ // - - - - - - - - - - - - - - // // Apagar banco de dados // // - - - - - - - - - - - - - - // /* indexedDB.deleteDatabase('library1'); indexedDB.deleteDatabase('library2'); indexedDB.deleteDatabase('library3'); indexedDB.deleteDatabase('library4'); indexedDB.deleteDatabase('library5'); indexedDB.deleteDatabase('library7'); indexedDB.deleteDatabase('library8'); indexedDB.deleteDatabase('library9'); indexedDB.deleteDatabase('library12'); indexedDB.deleteDatabase('library13'); */ // testar se suporte indexedDB if (window.indexedDB) { criarBanco(); } } </script> ola </body> </html> |
Desenvolvimento / Programação > HTML5 >