JavaScript sqlite [fermé]
Meilleures recommandations pour l'accès et la manipulation des bases de données sqlite à partir de JavaScript.
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...?
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.
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);
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é.
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
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.
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.
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
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.
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.