题
从 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
如果您在 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 来运行它。