从JavaScript访问和操作sqlite数据库的最佳建议.
有一个项目称为sql.js
JavaScript中的SQLite端口.
sql.js是SQLite到JavaScript的一个端口,通过使用Emscripten编译SQLite C代码.
如果要从Web浏览器中访问SQLite数据库,则没有多少解决方案.
SQLite C库已使用emscripten 移植到javascript.该港口是由Alon Zakai(也是emscripten的作者)的名字开始的.我是这个库的当前维护者.sql.js
API如下:
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
如果你编写客户端javascript,在节点中,你有更多的选择.请参阅:https://www.npmjs.org/search?q = sqlite.
如果你有一个编译工具链,并且可以不关心必须为不同平台编译你的应用程序(或只针对一个平台),我会建议你使用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
可以从节点使用.如果你想要一个纯粹的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);
好吧,如果您正在使用客户端JavaScript,我认为您将失去运气......浏览器倾向于沙盒化JavaScript环境,因此您无法以访问数据库等任何通用容量访问该计算机.
如果您正在讨论从客户端访问的服务器端的SQLite数据库,您可以设置一个AJAX解决方案,调用某些服务器端代码来访问它.
如果您正在讨论Rhino或其他服务器端JavaScript,您应该查看宿主语言对SQLite的API访问(例如Rhino的JDBC).
或许澄清一下你的问题......?
Google Gears有一个内置的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