Question

Meilleures recommandations pour l'accès et la manipulation de bases de données SQLite à partir de JavaScript.

Était-ce utile?

La solution

Eh bien, si vous travaillez avec JavaScript côté client, je pense que vous aurez de la chance ... les navigateurs ont tendance à mettre en sandbox l'environnement JavaScript afin que vous n'ayez pas accès à la machine de manière aussi générale que l'accès une base de données.

Si vous parlez d'une base de données SQLite sur le serveur auquel vous accédez depuis le client, vous pouvez configurer une solution AJAX qui appelle un code côté serveur pour y accéder.

Si vous parlez de Rhino ou d'un autre script JavaScript côté serveur, vous devez examiner l'accès de l'API du langage hôte à SQLite (tel que le JDBC pour Rhino).

Peut-être clarifiez-vous votre question un peu plus ...?

Autres conseils

Un projet appelé sql.js est un portage de SQLite en JavaScript.

  

sql.js est un portage de SQLite en JavaScript, en compilant le code SQLite C avec Emscripten.

Panorama des solutions javascript SQLite

Dans le navigateur

Si vous souhaitez accéder à une base de données SQLite à partir d'un navigateur Web, vous n'avez pas beaucoup de solutions.

sql.js

La bibliothèque SQLite C a été transférée en javascript à l'aide de emscripten . Le port a été lancé sous le nom de sql.js par Alon Zakai (qui est également le auteur de emscripten). Je suis le responsable actuel de cette bibliothèque.

L'API ressemble à:

<script src='js/sql.js'></script>
<script>
    //Create the database
    var db = new SQL.Database();
    // Run a query without reading the results
    db.run("CREATE TABLE test (col1, col2);");
    // Insert two rows: (1,111) and (2,222)
    db.run("INSERT INTO test VALUES (?,?), (?,?)", [1,111,2,222]);

    // Prepare a statement
    var stmt = db.prepare("SELECT * FROM test WHERE a BETWEEN $start AND $end");
    stmt.getAsObject({$start:1, $end:1}); // {col1:1, col2:111}

    // Bind new values
    stmt.bind({$start:1, $end:2});
    while(stmt.step()) { //
        var row = stmt.getAsObject();
        // [...] do something with the row of result
    }
</script>

Web SQL

Le W3C avait commencé à travailler sur une API native d'exécution du code SQL dans le navigateur, appelée web sql . Un exemple d'utilisation de cette API:

var db = openDatabase('mydb', '1.0', 'my first database', 2 * 1024 * 1024);
db.transaction(function (tx) {
  tx.executeSql('CREATE TABLE IF NOT EXISTS foo (id unique, text)');
  tx.executeSql('INSERT INTO foo (id, text) VALUES (1, "synergies")');
});

Cependant, le projet a été abandonné . Ainsi, ce n'est pas largement supporté. Voir: http://caniuse.com/sql-storage

Dans le noeud

Si vous écrivez javascript côté client, dans node, vous avez un peu plus de choix. Voir: https://www.npmjs.org/search?q=sqlite .

node-sqlite3

Si vous avez une chaîne d’outils de compilation et ne vous inquiétez pas de devoir compiler votre application pour différentes plates-formes (ou si vous ne ciblez qu’une plate-forme), je vous conseillerais d’utiliser node-sqlite3 . Il est rapide (beaucoup plus rapide que sql.js ), possède une API complète et une bonne documentation. Voici un exemple d’API:

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');

db.serialize(function() {
  db.run("CREATE TABLE lorem (info TEXT)");

  var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
  for (var i = 0; i < 10; i++) {
      stmt.run("Ipsum " + i);
  }
  stmt.finalize();

  db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
      console.log(row.id + ": " + row.info);
  });
});

db.close();

sql.js

Oui, encore. sql.js peut être utilisé à partir du noeud. C'est la solution si vous voulez une application javascript pure. Cependant, ce sera plus lent que la solution précédente.

Voici un exemple d'utilisation de sql.js à partir du noeud:

var fs = require('fs');
var SQL = require('sql.js');
var filebuffer = fs.readFileSync('test.sqlite');

db.run("INSERT INTO test VALUES (?,?,?)", [1, 'hello', true]);  -- corrected INT to INTO


var data = db.export();
var buffer = new Buffer(data);
fs.writeFileSync("filename.sqlite", buffer);

Google Gears est doté d'une base de données sqlite intégrée - mais vous devez vous assurer que les utilisateurs le possèdent. installé si vous envisagez de vous en servir.

En fonction de votre situation, vous pourrez peut-être appliquer l’installation. Sinon, vous devriez la considérer comme une bonne chose à faire, mais subir une dégradation progressive afin que le site continue de fonctionner s’il n’est pas installé.

Si vous souhaitez accéder aux bases de données SQLite sur le navigateur (c’est-à-dire côté client), vous avez besoin de votre navigateur pour le prendre en charge. Vous pouvez le faire avec SpiderApe http://spiderape.sourceforge.net/plugins/sqlite/ qui suppose que le navigateur est basé sur Mozilla (c'est-à-dire avec le support SQLite). Vous devrez toujours autoriser l'accès aux bibliothèques sous-jacentes ( http: // www.mozilla.org/projects/security/components/signed-scripts.html )

Si vous recherchez un accès serveur depuis des programmes Javascript vers des bases de données SQLite, il existe plusieurs options: JSDB en est un http: / /www.jsdb.org/ ; JSEXT, une autre http://jsext.sourceforge.net/ ; et jslibs un autre http://code.google.com/p/jslibs/

- MV

La bibliothèque sql.js vous permettra d'appeler des requêtes SQL côté client. avec cette bibliothèque, vous pouvez facilement diffuser toutes les données entre le serveur et le client en appelant .open (data) et .exportData (). c'est très pratique.

En outre, HTML5 a capacité de stockage , mais en tant que nouvelle norme technologique, vous ne pouvez pas supposer que les clients soutiendront cela.

Lawnchair est une très bonne option si vous n'êtes pas coincé avec SQL, car il fournit une clé facile à utiliser. / approche de la valeur. ces deux bibliothèques constituent une solution complète pour utiliser une base de données SQL côté client.

Une autre bonne bibliothèque de stockage est jstorage . il peut être utilisé pour conserver les données du fichier "sql.js". sur le client. Il prend en charge une grande variété de navigateurs (y compris les navigateurs mobiles, IE7 et IE7!) Et survit même aux pannes de navigateur.

Si vous exécutez des scripts privilégiés sous Windows (HTA ou WSH), vous pouvez accéder aux sources de données ODBC à l'aide d'un "ADODB.Recordset". ActiveXObject.

Si vous parlez du côté client sur une page Web, l'article ci-dessus concernant Google Gears est votre meilleur choix.

Vous pouvez le réaliser avec l’API XUL sur la pile mozilla firefox. Ce tutoriel à ce sujet: http: // www.arashkarimzadeh.com/articles/10-xul/25-sqlite-api-for-xul-application-using-javascript.html

Sur un Mac? Jetez un coup d’œil à JSTalk de Gus Meuller, qui exploite Scripting Bridge et JSCocoa de Patrick Geiller.

Gus parle spécifiquement du support SQLite ici: http: // gusmueller. com / blog / archives / 2009/03 / jstalk_extras.html ... fonctionne très bien.

JayData fournit également une boîte à outils permettant de travailler avec sqLite / webSql à l'aide de JavaScript. Vous aurez besoin d’un navigateur, de Rhin ou de Nodejs pour pouvoir exécuter la chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top