45

从 JavaScript 访问和操作 sqlite 数据库的最佳建议。

4

10 回答 10

28

有一个名为sql.jsJavaScript 的 SQLite 端口的项目。

sql.js 是 SQLite 到 JavaScript 的一个端口,通过使用 Emscripten 编译 SQLite C 代码。

于 2012-06-19T22:55:38.197 回答
23

javascript SQLite解决方案全景图

在浏览器中

如果您想从 Web 浏览器中访问 SQLite 数据库,那么您没有很多解决方案。

sql.js

SQLite C 库已使用emscripten移植到 javascript。该端口是由 Alon Zakai(也是 emscripten 的作者)的名义启动的。我是这个库的当前维护者。sql.js

API 如下所示:

<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

W3C 已经开始研究用于在浏览器中执行 SQL 的原生 API,称为web sql。该 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")');
});

然而,该项目已被放弃。因此它没有得到广泛的支持。见:http ://caniuse.com/sql-storage

在节点

如果您在 node 中编写客户端 javascript,则您有更多选择。请参阅:https ://www.npmjs.org/search?q=sqlite 。

节点-sqlite3

如果您有一个编译工具链,并且不关心必须为不同平台(或仅针对一个平台)编译您的应用程序,我建议您使用node-sqlite3. 它速度快(比 快得多sql.js),具有完整的 API 和良好的文档。API 示例如下:

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

是的,再次。sql.js可以从节点使用。如果您想要一个纯 JavaScript 应用程序,这就是解决方案。但是,它会比以前的解决方案慢。

以下是如何sql.js从节点使用的示例:

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);
于 2014-05-26T23:17:48.743 回答
13

好吧,如果您正在使用客户端 JavaScript,我认为您将不走运……浏览器倾向于将 JavaScript 环境沙箱化,因此您无法以任何一般能力访问机器,例如访问数据库。

如果您正在谈论从客户端访问的服务器端上的 SQLite DB,您可以设置一个 AJAX 解决方案,调用一些服务器端代码来访问它。

如果您在谈论 Rhino 或其他一些服务器端 JavaScript,您应该查看宿主语言的 API 访问 SQLite(例如 Rhino 的 JDBC)。

也许更澄清你的问题......?

于 2008-09-15T07:54:33.960 回答
11

Google Gears有一个内置的 sqlite 数据库——但如果你打算依赖它,你需要确保人们已经安装了它。

根据您的情况,您可能可以强制安装,否则您应该将其视为一个不错的选择,但要进行优雅的降级,以便该站点在未安装的情况下仍然可以工作。

于 2008-09-15T08:02:02.600 回答
10

如果您希望在浏览器(即客户端)上访问 SQLite 数据库,则需要您的浏览器来支持它。您可以使用 SpiderApe http://spiderape.sourceforge.net/plugins/sqlite/来实现,它假定浏览器是基于 Mozilla 的(即支持 SQLite)。您仍然需要允许访问底层库(http://www.mozilla.org/projects/security/components/signed-scripts.html

如果您正在寻找从 Javascript 程序到 SQLite 数据库的服务器端访问,有几种选择: JSDB 是一种http://www.jsdb.org/;JSEXT 另一个http://jsext.sourceforge.net/;和 jslibs 另一个http://code.google.com/p/jslibs/

-- MV

于 2008-09-15T14:51:10.310 回答
4

sql.js库将使您能够在客户端调用 SQL 查询使用该库,您可以通过调用 .open(data) 和 .exportData() 轻松地在服务器和客户端之间传输整个数据。这非常方便。

另外 HTML5 有存储能力,但是作为新技术标准,你不能假设所有的客户端都会支持。

如果您不使用 SQL, Lawnchair是一个非常好的选择,因为它提供了一种易于使用的键/值方法。这两个库为在客户端使用 sql 数据库提供了完整的解决方案。

另一个好的存储库是jStorage。它可用于保存客户端上“sql.js”中的数据。它支持多种浏览器(包括移动浏览器,以及 IE7 和 IE7 !),甚至可以在浏览器崩溃中幸存下来。

于 2012-10-31T09:56:27.297 回答
2

如果您在 Windows 中运行特权脚本(在 HTA 或 WSH 中),则可以使用“ADODB.Recordset”ActiveXObject 访问 ODBC 数据源。

如果您在网页上谈论客户端,那么上面的帖子回复:Google Gears 是您最好的选择。

于 2008-09-15T14:01:30.863 回答
2

您可以在 mozilla firefox 堆栈上使用 XUL API 执行它。这是一些关于它的教程: http ://www.arashkarimzadeh.com/articles/10-xul/25-sqlite-api-for-xul-application-using-javascript.html

于 2010-08-01T04:58:20.810 回答
0

在 Mac 上?看看 Gus Meuller 的 JSTalk,它利用了 Scripting Bridge 和 Patrick Geiller 的 JSCocoa。

Gus 在这里专门讨论了 Sqlite 支持:http: //gusmueller.com/blog/archives/2009/03/jstalk_extras.html ...效果很好。

于 2009-05-01T07:38:49.400 回答
0

JayData还提供了一个使用 JavaScript 与 sqLite/webSql 一起工作的工具包。你需要一个浏览器、Rhine 或 Nodejs 来运行这个东西。

于 2012-05-15T06:23:51.160 回答