Hallo Forum,
ich beschäftige mich zur Zeit mit der indexedDB (WebSQL wäre mir lieber gewesen *g), nach einwenig googeln und bisher einem wirklich hilfreichen Blog konnte ich die ersten Schritte machen...
Da die Funktionsweise durch aus bissl umständlich ist habe ich angefangen mir wrapper zu bauen (js.db funktionierte leider nicht wirklich).
Funktioniert bis her ganz gut, Tabellen können recht einfach erstellt werden und auch gleich mit indexes versehen werden.
Das eintragen der Datensätze klappt ebenfalls und auch das auslesen.
Mit diesem Code habe ich mal das "Updaten" einwenig ausprobiert und ich wollte wissen wie es so funktioniert wenn ich nur den Datensatz einer bestimmten ID haben möchte.
Nun mal zu ein par Fragen:
1) Muss ich immer den ganzen Datensatz neu speichern oder kann man ähnlich wie in SQL auch nur eine einzelne oder festgelegte Spalten mit neuem Inhalt füllen (wie?) ?
2) Mit der Range-Möglichkeit kann ich sofern die id == keyPath ist anhand einer ID selektieren aber auch hier stellt sich mir die Frage wie sieht es mit verschiedenen indexes aus?
Also auch wieder wie bei SQL, das ich nach Spalten Inhalt selektieren kann (mit range dürfte wenn ich mich nicht irre ja immer nur die eine definierte spalte eine Rolle spielen aber man kann ja indexes hinzufügen).
3) Datensätze löschen fehlt mir noch gänzlich.
Es gibt hier bei w3.org zwar eine Übersicht, aber ich finds a bissl argh unübersichtlich und leider nur selten Code-schnippsel.
MfG: Paykoman
PS: Kleine Codeschnippsel gerade für die Syntax und Funktionsnamen wären sehr willkommen!
ich beschäftige mich zur Zeit mit der indexedDB (WebSQL wäre mir lieber gewesen *g), nach einwenig googeln und bisher einem wirklich hilfreichen Blog konnte ich die ersten Schritte machen...
Da die Funktionsweise durch aus bissl umständlich ist habe ich angefangen mir wrapper zu bauen (js.db funktionierte leider nicht wirklich).
Code:
/** [-Indexed-DB-] */ idb = function(db, v, tables, onReady){ var that = this; this.db; this.insert = function(table, data, callback){ var store = that.db.transaction(table, 'readwrite').objectStore(table); var request = store.put(data); request.onsuccess = callback; }; this.select = function(table, mode, range, callback){ // var trans = that.db.transaction(table, 'readonly'); var store = that.db.transaction(table, 'readonly').objectStore(table); switch( mode ){ case 'of': range = IDBKeyRange.lowerBound(range); break; // alle Einträge ab Position x case 'to': range = IDBKeyRange.upperBound(range); break; // alles bis Eintrag X case 'bt': range = IDBKeyRange.only(range[0], range[1]); break; // von x bis x case 'id': range = IDBKeyRange.only(range); break; // nur diese ID/diesen key } var cursorRequest = store.openCursor(range); cursorRequest.onsuccess = function(evt){ // console.log('succes', evt); var result = evt.target.result; if( result ){ callback(result.value); result.continue(); } }; } // create database var newDB = indexedDB.open(db, v); newDB.onupgradeneeded = function(){ console.log('Datenbank angelegt'); that.db = this.result; for( var table in tables ){ var tableData = tables[table]; if( !that.db.objectStoreNames.contains(table) ){ var newTable = that.db.createObjectStore(table, tableData.shift()); // add indexes if exist tableData.forEach(function(index){ newTable.createIndex(index.shift(), index.shift(), index.shift()); }); } } }; newDB.onsuccess = function(){ console.log('Datenbank geöffnet'); that.db = this.result; onReady(); }; } var tables = { foo: [ {keyPath: 'id', autoIncrement: false, unique: true}, // ['col1', 'col1', { unique: true }] // index hinzufügen // ['col2', 'col2', { unique: true }] // index hinzufügen ] }; var db = new idb('test', 1, tables, function(){ console.log('test DB is ready'); // db.insert('foo', {id: 'set1', text: 'Datensatz nummer #2'}, function(e){ // console.log('datensatz 1 eingetragen', e) // }); // db.insert('foo', {id: 'set2', text: 'Datensatz nummer #3'}, function(e){ // console.log('datensatz 2 eingetragen', e) // }); db.select('foo', 'id', 'set1', function(e){ console.log('datensatz', e) }); });
Das eintragen der Datensätze klappt ebenfalls und auch das auslesen.
Mit diesem Code habe ich mal das "Updaten" einwenig ausprobiert und ich wollte wissen wie es so funktioniert wenn ich nur den Datensatz einer bestimmten ID haben möchte.
Nun mal zu ein par Fragen:
1) Muss ich immer den ganzen Datensatz neu speichern oder kann man ähnlich wie in SQL auch nur eine einzelne oder festgelegte Spalten mit neuem Inhalt füllen (wie?) ?
2) Mit der Range-Möglichkeit kann ich sofern die id == keyPath ist anhand einer ID selektieren aber auch hier stellt sich mir die Frage wie sieht es mit verschiedenen indexes aus?
Also auch wieder wie bei SQL, das ich nach Spalten Inhalt selektieren kann (mit range dürfte wenn ich mich nicht irre ja immer nur die eine definierte spalte eine Rolle spielen aber man kann ja indexes hinzufügen).
3) Datensätze löschen fehlt mir noch gänzlich.
Es gibt hier bei w3.org zwar eine Übersicht, aber ich finds a bissl argh unübersichtlich und leider nur selten Code-schnippsel.
MfG: Paykoman
PS: Kleine Codeschnippsel gerade für die Syntax und Funktionsnamen wären sehr willkommen!
Kommentar