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.

17
demandé sur Community 2011-05-24 23:53:27

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 .

9
répondu Sam Dutton 2017-02-17 00:33:45

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
15
répondu Lee Chee Kiam 2012-03-19 10:28:23

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ères

peuvent ê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
8
répondu Kyaw Tun 2012-09-09 23:15:00

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.

7
répondu Gecko 2012-12-30 12:56:58

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

7
répondu Robesz 2013-02-22 17:00:43

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 :) .

0
répondu Kevin 2016-07-08 21:53:46