JavaScript sqlite [fermé]

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

44
demandé sur benphane 2008-09-15 11:28:56

10 réponses

Eh bien, si vous travaillez sur JavaScript côté client, je pense que vous n'aurez pas de chance... les navigateurs ont tendance à sandbox 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 l'accès à une base de données.

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

Si vous parlez de Rhino ou d'un autre côté serveur JavaScript, vous devriez regarder dans L'accès API du langage hôte dans SQLite (comme le JDBC pour Rhino).

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

11
répondu Mike Stone 2008-09-15 07:54:33

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

Sql.js est un port de SQLite vers JavaScript, en compilant le code SQLite C avec Emscripten.

26
répondu Juicy Scripter 2012-06-19 22:55:38

Panorama des solutions javascript SQLite

Dans le navigateur

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

Sql.js

La bibliothèque SQLite C a été portée en javascript En Utilisant emscripten. Le port a été lancé 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 pour exécuter 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, il n'est pas largement soutenu. Voir: http://caniuse.com/sql-storage

Dans le noeud

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

Nœud-sqlite3

Si vous avez une chaîne d'outils de compilation et que vous ne vous souciez pas d'avoir à compiler votre application pour différentes plates-formes (ou cibler une seule plate-forme), je vous conseille d'utiliser node-sqlite3. Il est rapide (beaucoup plus rapide que sql.js), a une API complète et une bonne documentation. Un exemple de L'API est le suivant:

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 nœud. C'est la solution si vous voulez une application javascript pure. Cependant, il sera plus lent que la solution précédente.

Voici un exemple d'utilisation de sql.js à partir d'un nœud:

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
répondu lovasoa 2014-11-06 15:18:47

Google Gears {[2] } dispose d'une base de données sqlite intégrée - mais vous devrez vous assurer que les gens l'ont installé si vous prévoyez de compter sur elle.

Selon votre situation, vous pouvez être en mesure d'imposer l'installation, sinon vous devriez le traiter comme un agréable à avoir, mais avoir une dégradation gracieuse pour que le site fonctionne toujours s'il n'est pas installé.

11
répondu Cebjyre 2008-09-15 08:02:02

Si vous cherchez à accéder aux bases de données SQLite sur le navigateur (ie. côté client) vous aurez besoin de votre navigateur pour le prendre en charge. Vous pouvez le faire avec SpiderApe http://spiderape.sourceforge.net/plugins/sqlite/{[2] } qui suppose que le navigateur est basé sur Mozilla (ie. 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 côté serveur à partir de Javascript programmes pour les 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

10
répondu user7878 2008-09-15 14:51:10

Le sql.la bibliothèque js vous permettra d'appeler des requêtes SQL côté client. avec cette bibliothèque, vous pouvez facilement diffuser l'ensemble des données entre le serveur et le client en l'appelant .ouvert(données) et de l' .exportData (). ce qui est très pratique.

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

Lawnchair est une très bonne option si vous n'êtes pas coincé avec SQL, car cela donne un approche clé/valeur facile à utiliser. ces deux bibliothèques constituent une solution complète pour travailler avec 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 "sql.js" sur le client. Il prend en charge une grande variété de navigateurs (y compris les navigateurs mobiles, et IE7 et IE7 !), et survit même aux accidents du navigateur.

3
répondu d.popov 2012-10-31 09:56:27

Si vous exécutez des scripts privilégiés dans Windows (soit dans un HTA ou WSH), vous pouvez accéder aux sources de données ODBC en utilisant un "ADODB.Jeu D'Enregistrements" ActiveXObject.

Si vous parlez du côté client sur une page web, le post ci-dessus re: Google Gears est votre meilleur pari.

2
répondu Joel Anair 2008-09-15 14:01:30

Vous pouvez l'exécuter 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

2
répondu Brain90 2010-08-01 04:58:20

Sur un Mac? Jetez un oeil à Jstalk de Gus Meuller, qui tire parti de 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.

0
répondu jcburns 2009-05-01 07:38:49

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

0
répondu Peter Aron Zentai 2012-05-15 06:23:51