45 votes

JavaScript sqlite

Meilleures recommandations pour accéder et manipuler des bases de données SQLite à partir de JavaScript.

28voto

Juicy Scripter Points 16091

Il y a un projet appelé sql.js qui est un portage de SQLite en JavaScript.

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

23voto

lovasoa Points 189

Panorama de javascript SQLite solutions

Dans le navigateur

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

sql.js

L'SQLite C de la bibliothèque a été porté à javascript à l'aide de emscripten. Le port a été lancé sous le nom de sql.js par Alon Zakai (qui est également l'auteur de emscripten). Le port d'origine est maintenant laissés à l'abandon, et a plusieurs limitations.

Cependant, je suis l'auteur d'un nouveau port, basé sur le précédent, qui est activement maintenu: https://github.com/lovasoa/sql.js

L'API va comme:

<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 a commencé à travailler sur une API native pour l'exécution de SQL à l'intérieur du navigateur, appelé web sql. Un exemple d'utilisation de l'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, il n'est pas largement soutenue. Voir: http://caniuse.com/sql-storage

Dans le nœud

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

nœud-sqlite3

Si vous avez une compilation de la chaîne, et peut ne pas s'en soucier d'avoir à compiler votre application pour différentes plates-formes (ou à la cible une seule plate-forme), je conseille que vous utilisez node-sqlite3. Il est rapide, a une API complète et une bonne documentation. Un exemple de l'API est comme suit:

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 une fois. sql.js peut être utilisé à partir de nœud. C'est la solution si vous voulez un pur javascript de l'application. Cependant, il sera plus lente que la précédente solution.

Voici un exemple de comment utiliser sql.js de nœud:

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

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

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

13voto

Mike Stone Points 21293

Eh bien, si vous travaillez sur le côté client en JavaScript, je pense que vous serez hors de la chance... les navigateurs ont tendance à le sandbox de l'environnement JavaScript de sorte que vous n'avez pas accès à la machine dans n'importe quel type de capacité générale comme un accès à une base de données.

Si vous parlez d'un SQLite DB sur la fin de serveur accessible à partir du client final, vous pourriez mettre en place une solution AJAX qui appelle certains de côté de serveur de code d'accès.

Si vous parlez de Rhinocéros ou d'un autre serveur JavaScript côté, vous devriez regarder dans la langue du pays d'accueil de l'API d'accès en SQLite (comme JDBC pour Rhino).

Peut-être clarifier votre question, un peu plus...?

11voto

Cebjyre Points 3946

Google Gears possède une base de données sqlite intégrée, mais vous devez vous assurer que les personnes le font installer 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, mais subir une dégradation progressive afin que le site continue de fonctionner s’il n’est pas installé.

10voto

user7878 Points 91

Si vous êtes à la recherche pour accéder à des bases de données SQLite sur le navigateur (ie. côté client), vous aurez besoin de votre navigateur afin de la soutenir. Vous pouvez le faire avec SpiderApe http://spiderape.sourceforge.net/plugins/sqlite/ qui suppose que le navigateur est Mozilla base (ie. avec le support SQLite). Vous aurez toujours besoin de permettre l'accès à des bibliothèques sous-jacentes ( http://www.mozilla.org/projects/security/components/signed-scripts.html )

Si vous êtes à la recherche pour serverside accès à partir de Javascript programmes de bases de données SQLite il y a plusieurs options: JSDB est un http://www.jsdb.org/ ; JSEXT un autre http://jsext.sourceforge.net/ ; et jslibs un autre http://code.google.com/p/jslibs/

-- MV

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X