it-swarm.it

JavaScript sqlite

I migliori consigli per l'accesso e la manipolazione dei database SQLite da JavaScript.

44
benphane

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ù ...?

11
Mike Stone

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.

26
Juicy Scripter

Panorama di soluzioni javascript SQLite

Nel browser

Se si desidera accedere a un database SQLite da un browser Web, non si hanno molte soluzioni.

sql.js

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>

SQL Web

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

Nel nodo

Se scrivi javascript sul lato client, nel nodo, hai un po 'più di scelte. Vedi: https://www.npmjs.org/search?q=sqlite .

node-sqlite3

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();

sql.js

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

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.

11
Cebjyre

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

10
user7878

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.

3
d.popov

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

2
Brain90

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.

2
Joel Anair

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.

0
jcburns

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

0