Meilleures recommandations pour accéder et manipuler des bases de données SQLite à partir de JavaScript.
Réponses
Trop de publicités? 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.
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);
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...?
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é.
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