I migliori consigli per l'accesso e la manipolazione dei database SQLite da JavaScript.
Bene, se stai lavorando su JavaScript lato client, penso che sarai sfortunato ... i browser tendono a sandbox l'ambiente JavaScript in modo da non avere accesso alla macchina in qualsiasi tipo di capacità generale come l'accesso a un database.
Se si sta parlando di un DB SQLite sul lato server accessibile dal client, è possibile configurare una soluzione AJAX che richiami un codice lato server per accedervi.
Se stai parlando di Rhino o di qualche altro JavaScript lato server, dovresti esaminare l'accesso API del linguaggio Host in SQLite (come JDBC per Rhino).
Forse chiarisci la tua domanda un po 'di più ...?
C'è un progetto chiamato sql.js
che è una porta di SQLite in JavaScript.
sql.js è una porta di SQLite in JavaScript, compilando il codice SQLite C con Emscripten.
Se si desidera accedere a un database SQLite da un browser Web, non si hanno molte soluzioni.
La libreria SQLite C è stata ported su javascript usando emscripten . La porta è stata avviata con il nome di sql.js
di Alon Zakai (che è anche l'autore di emscripten). Sono l'attuale manutentore di questa libreria.
L'API è simile a:
<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>
Il W3C aveva iniziato a lavorare su un'API nativa per l'esecuzione di SQL all'interno del browser, chiamata web sql. Un esempio di utilizzo di tale 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")');
});
Tuttavia, il progetto è stato abbandonato. Quindi non è ampiamente supportato. Vedi: http://caniuse.com/sql-storage
Se scrivi javascript sul lato client, nel nodo, hai un po 'più di scelte. Vedi: https://www.npmjs.org/search?q=sqlite .
Se si dispone di una toolchain di compilazione e non si può fare a meno di dover compilare la propria applicazione per piattaforme diverse (o scegliere solo una piattaforma), si consiglia di utilizzare node-sqlite3
. È veloce (molto più veloce di sql.js
), ha un'API completa e una buona documentazione. Un esempio dell'API è il seguente:
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();
Sì, di nuovo. sql.js
può essere utilizzato dal nodo . Questa è la soluzione se si desidera un'applicazione javascript pura. Tuttavia, sarà più lento rispetto alla soluzione precedente.
Ecco un esempio di come utilizzare sql.js
dal nodo:
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);
Google Gears ha un database sqlite integrato, ma dovrai assicurarti che le persone lo installino se prevedi di fare affidamento su di esso.
A seconda delle circostanze, potresti essere in grado di imporre l'installazione, altrimenti dovresti trattarlo come un Nice-to-have, ma con una degradazione graduale in modo che il sito funzioni ancora se non è installato.
Se stai cercando di accedere ai database SQLite sul browser (per esempio lato client) avrai bisogno del tuo browser per supportarlo. Puoi farlo con SpiderApe http://spiderape.sourceforge.net/plugins/sqlite/ che presuppone che il browser sia basato su Mozilla (cioè con supporto SQLite). Dovrai comunque consentire l'accesso alle librerie sottostanti ( http://www.mozilla.org/projects/security/components/signed-scripts.html )
Se stai cercando un accesso server dai programmi Javascript ai database SQLite ci sono diverse opzioni: JSDB è uno http://www.jsdb.org/ ; JSEXT altro http://jsext.sourceforge.net/ ; e jslibs un altro http://code.google.com/p/jslibs/
- MV
La libreria sql.js ti permetterà di chiamare query SQL sul lato client. con tale libreria, puoi facilmente eseguire lo streaming di tutti i dati tra il server e il client chiamando .open (dati) e .exportData (). questo è molto utile.
inoltre HTML5 ha capacità di archiviazione , ma come nuovo standard tecnologico, non si può presumere che tutti i client lo supporteranno.
Lawnchair è un'ottima opzione se non si è bloccati con SQL, in quanto fornisce un approccio chiave/valore facile da usare. queste due librerie costituiscono una soluzione completa per lavorare con il database sql sul lato client.
Un'altra buona libreria di archiviazione è jstorage . può essere usato per conservare i dati dal "sql.js" sul client. Supporta una grande varietà di browser (compresi i browser mobili, IE7 e IE7!) E sopravvive persino agli arresti anomali del browser.
Puoi eseguirlo con XUL API su mozilla firefox stack. Questo tutorial su questo: http://www.arashkarimzadeh.com/articles/10-xul/25-sqlite-api-for-xul-application-using-javascript.html
Se si eseguono script con privilegi in Windows (in HTA o WSH), è possibile accedere alle origini dati ODBC utilizzando un ActiveXObject "ADODB.Recordset".
Se parli di lato client su una pagina web, il post precedente: Google Gears è la soluzione migliore.
Su un Mac? Dai un'occhiata a JSTalk di Gus Meuller, che sfrutta Scripting Bridge e JSCocoa di Patrick Geiller.
Gus parla in modo specifico del supporto di Sqlite qui: http://gusmueller.com/blog/archives/2009/03/jstalk_extras.html ... funziona alla grande.
JayData fornisce anche un toolkit per lavorare con sqLite/webSql usando JavaScript. Avrai bisogno di un browser, Reno o Nodejs per eseguire la cosa però.