Bibliothèque JavaScript pour relier IndexedDB et WebSQL
je suis curieux s'il y a une bibliothèque ou un projet là-bas pour fournir une interface générique à IndexedDB ou à WebSQL, selon le soutien du navigateur de l'utilisateur. S'ils utilisent Chrome/Safari, utilisez WebSQL, S'ils utilisent Firefox ou Internet Explorer, utilisez IndexedDB.
L'affiche de cette question semble avoir cru une solution, mais n'a pas fourni le code source.
6 réponses
Vous pouvez aller avec Lawnchair , qui est assez bien connu, comme mentionné par Guido Tapia dans la question que vous lien.
soit ça, soit utiliser son picnet .données.DataManager solution.
Aussi jeter un oeil à la persistance.js .
JasonCasden a partagé une énorme liste de bibliothèques/wrappers lors de sa présentation in-browser storage et me . Voici la liste:
lawnchair
persistence.js
persistJS
amplify.store
localStorageDB
https://github.com/axemclion/IndexedDB
realStorage
YUI3 CacheOffline
dojox.storage
DomSQL
Impel
ActiveJS ActiveRecord
JazzRecord
picnet.data.DataManager
ShinyCar
lscache
Kizzy
Artemia
microcache.js
Store.js
j'ai écrit YDN-DB pour le but exact. Il s'agit d'un wrapper de base de données pour IndexedDB, WebSql et localStorage, construit sur le dessus de la bibliothèque de fermeture.
Objectif
belle API pour une application web robuste, sécurisée et performante à grande échelle.
Caractéristiques
- supporte les mécanismes de stockage IndexedDB, Web SQL et localStorage.
- bien testé module de bibliothèque de fermeture.
- version prise en charge de la migration, de chiffrement, de requête et transaction .
- Chaque appel de méthode est une transaction atomique. Toutes les méthodes sont asynchrones.
- suivez l'étiquette javascript habituelle comme: espace de nom unique, pas de global, pas d'erreur globbing (sauf si nous vous l'avons dit dans doc), pas de requête eval, paramétrée, c'est ceci, erreur de codage lancer.
- jQuery plugin disponible (voir la section Télécharger).
usage de base
importer le dernier script js miniifié (voir la section Télécharger) dans vos fichiers HTML. Cela créera un objet unique dans le champ d'Application global, appelé ydn.DB.Stockage.
var db = new ydn.db.Storage('db name');
db.setItem('x', 'some value')
db.getItem('x').success(function(value) {
console.log('x = ' + value);
}
Requête
calculer la moyenne en utilisant la requête
q = db.query('customer').average('age');
avg = q.fetch()
la Clé de la requête
q = db.query('customer', 'age').bound(18, 25, true).where('sex', '=', 'FEMALE').select('full_name')
young_girl_names = q.fetch()
Transaction
p1 = db.key('player', 1);
db.transaction(function() {
p1.get().success(function(p1_obj) {
p1_obj.health += 10;
p1.put(p123_obj);
});
}, [p1]);
cryptage
Les données de valeur de la chaîne de caractèrespeuvent être éventuellement cryptées en utilisant le chiffrement SHA-1.
db = new ydn.db.Store('store name')
db.setSecret(passphase); // generally send from server side upon login
db.setItem(key, value, 3600*1000); // data expire on one hour
db.getItem(key); // data will be decrypted using the provided passphase
regardez ça: https://github.com/axemclion/IndexedDBShim
c'est un polyfill pour activer IndexedDB en utilisant WebSql. Je l'utilise et je pense qu'il est assez bon, mais comme chaque solution, il a des limites, bien que vous pouvez le développer presque tout ce que vous voulez sans grands problèmes.
la question Est répondue, je veux juste partager les mises à jour.
en mai 2012 JayData a été publié, qui est la bibliothèque unifiée d'accès aux données pour JavaScript et aide à gérer les données dans IndexedDB, WebSQL, SQLite, MongoDB, HTML5 localStorage bases de données et Facebook, OData, WebAPI, YQL services de données avec le même langage JavaScript syntaxe de requête syntaxe .
passer à IndexedDB à partir de WebSQL signifie uniquement changement de type de fournisseur de stockage:
var todoDB = new TodoDatabase({
provider: 'webSql', databaseName: 'MyTodoDatabase' });
var todoDB = new TodoDatabase({
provider: 'indexedDB', databaseName: 'MyTodoDatabase' });
si vous ne spécifiez pas le fournisseur, la bibliothèque détecte le stockage disponible du navigateur/périphérique dans l'ordre de priorité suivant (WebSQL, IndexedDB, HTML5 localStorage).
avertissement: je suis membre de l'équipe de développement du projet open-source JayData
j'espère que vous (OP) sont heureux avec les solutions proposées dans la réponse que vous avez accepté.
pour ceux qui sont encore à la recherche d'une solution capable (un groupe qui peut inclure ou non OP), consultez BakedGoods .
c'est une bibliothèque qui établit une interface uniforme qui peut être utilisée pour effectuer des opérations de stockage dans toutes les installations de stockage natives, et certains clients non natifs. Elle maintient également flexibilité et options offertes à l'utilisateur par chacun.
avec cela, la conduite des opérations de stockage dans n'importe lequel des types de base de données est une question de...
... spécifiant les options d'exploitation appropriées et les configurations équivalentes pour les deux types de bases de données:
//If the operation is a set(), and the referenced structures
//don't exist, they will be created automatically.
var webSQLOptionsObj = {
databaseName: "Example_DB",
databaseDisplayName: "Example DB",
databaseVersion: "",
estimatedDatabaseSize: 1024 * 1024,
tableData: {
name: "Main",
keyColumnName: "lastName",
columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)"
},
tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"]
};
var indexedDBOptionsObj = {
databaseName: "Example_DB",
databaseVersion: 1,
objectStoreData: {
name: "Main",
keyPath: lastName,
autoIncrement: false
},
objectStoreIndexDataArray: [
{name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false}
],
};
var optionsObj = {
conductDisjointly: false,
webSQL: webSQLOptionsObj,
indexedDB: indexedDBOptionsObj
};
... et la conduite de l'opération:
bakedGoods.set({
data: [
{value: {lastName: "Obama", firstName: "Barack"}},
{value: {lastName: "Biden", firstName: "Joe"}}
],
storageTypes: ["indexedDB", "webSQL"],
options: optionsObj,
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
son interface simple et le soutien de l'installation de stockage inégalée vient à le coût du manque de soutien pour certaines configurations propres à l'installation de stockage. Par exemple, il ne supporte pas la conduction des opérations de stockage dans les tables WebSQL avec des touches primaires à plusieurs colonnes.
donc si vous faites un usage intensif de ces types de fonctionnalités, vous pouvez vouloir regarder ailleurs.
Oh, et par souci de totale transparence, BakedGoods est maintenu par votre serviteur :) .