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

有帮助吗?

解决方案

好吧,如果你正在研究客户端 JavaScript,我想你会不走运......浏览器倾向于对 JavaScript 环境进行沙箱处理,因此您无法以任何类型的一般功能(例如访问数据库)访问计算机。

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

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

也许再澄清一下你的问题......?

其他提示

有一个项目叫 sql.js 这是 JavaScript 中 SQLite 的端口。

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

javascript SQLite 解决方案全景

在浏览器中

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

sql.js

SQLite C 库已 移植到 JavaScript 使用 恩脚本. 。该港口以以下名称启动: sql.js 作者:Alon Zakai(他也是 emscripten 的作者)。我是这个库的当前维护者。

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,称为 网络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);

谷歌齿轮 有一个内置的 sqlite 数据库 - 但如果您打算依赖它,您需要确保人们安装了它。

根据您的具体情况,您也许能够强制安装,否则您应该将其视为可有可无,但要进行优雅的降级,以便站点在未安装的情况下仍然可以运行。

如果您想在浏览器上访问 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

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

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

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

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

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

如果您正在谈论网页上的客户端,则上面的帖子将说明:Google Gears 是您的最佳选择。

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

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

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

杰达 还提供了一个使用 JavaScript 处理 sqLite/webSql 的工具包。不过,你需要一个浏览器、Rhine 或 Nodejs 来运行它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top