web-dev-qa-db-fra.com

JavaScript sqlite

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

44
benphane

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 quelque manière que ce soit, comme accéder à 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 clarifier votre question un peu plus ...?

11
Mike Stone

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.

26
Juicy Scripter

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é démarré sous le nom de sql.js par Alon Zakai (qui est également l'auteur de emscripten). Je suis le mainteneur actuel de cette bibliothèque.

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

En 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 que vous ne vous inquiétez pas de devoir compiler votre application pour différentes plates-formes (ou ne cible 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 de node ..__ 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 from node:

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);
17
lovasoa

Google Gears a une base de données sqlite intégrée - mais vous devez vous assurer que les personnes l’ont fait installer si vous envisagez de vous en servir.

En fonction de votre situation, vous pourrez peut-être appliquer l’installation. Sinon, vous devriez la traiter comme une installation agréable, mais subir une dégradation progressive afin que le site fonctionne toujours s’il n’est pas installé.

11
Cebjyre

Si vous souhaitez accéder aux bases de données SQLite sur le navigateur (par exemple, 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 depuis un programme Javascript depuis un programme Javascript vers une base de données SQLite, plusieurs options s'offrent à vous: JSDB est l'un http://www.jsdb.org/ ; JSEXT autre http://jsext.sourceforge.net/ ; et jslibs autre http://code.google.com/p/jslibs/

- MV

10
user7878

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 dispose de capacités de stockage , mais en tant que nouveau standard technologique, vous ne pouvez pas supposer que tous les clients le prendront en charge.

Lawnchair est une très bonne option si vous n’êtes pas coincé avec SQL, car il offre une approche clé-valeur facile à utiliser. Ces deux bibliothèques constituent une solution complète pour l'utilisation de la 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.

3
d.popov

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

2
Brain90

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 ActiveXObject "ADODB.Recordset".

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

2
Joel Anair

Sur un Mac? Jetez un coup d'œil au JSTalk de Gus Meuller, qui exploite Scripting Bridge et le 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.

0
jcburns

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

0