JavaScript的sqlite
有关从JavaScript访问和操作sqlite数据库的最佳build议。
那么,如果你正在使用客户端JavaScript,我认为你会走运…浏览器倾向于对JavaScript环境进行沙盒(sandbox),所以你无法像访问数据库一样访问机器。
如果您正在讨论从客户端访问的服务器端上的SQLite DB,则可以设置一个AJAX解决scheme来调用一些服务器端代码来访问它。
如果您正在讨论Rhino或其他服务器端JavaScript,则应该查看宿主语言对SQLite的API访问(例如,Rhino的JDBC)。
也许澄清你的问题多一点…?
有一个名为sql.js
的项目,它是JavaScript中的SQLite的一个端口。
sql.js是SQLite到JavaScript的端口,通过编译SQLite C代码和Emscripten。
JavaScript的SQLite解决scheme的全景
在浏览器中
如果你想从一个Web浏览器访问一个SQLite数据库,你没有很多的解决scheme。
sql.js
SQLite C库已经被移植到JavaScript使用emscripten 。 这个端口是由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>
Web 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
在节点中
如果您在节点中编写客户端JavaScript,则您有更多的select。 请参阅: https : //www.npmjs.org/search?q=sqlite 。
节点的sqlite3
如果你有一个编译工具链,并且不需要为不同的平台编译你的应用程序(或者只针对一个平台),我会build议你使用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应用程序,这是解决scheme。 但是,它会比以前的解决scheme慢。
这里是一个如何从节点使用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数据库的服务器端访问,有几个select:JSDB是一个http://www.jsdb.org/ ; JSEXT另一个http://jsext.sourceforge.net/ ; 和jslibs另一个http://code.google.com/p/jslibs/
– MV
sql.js库将使您能够在客户端调用SQL查询。 使用这个libray,你可以通过调用.open(data)和.exportData()方便地在服务器和客户端之间传输整个数据。 这非常方便。
另外HTML5具有存储function ,但是作为新的技术标准,你不能认为所有的客户端都会支持这个function。
如果你没有使用SQL, Lawnchair是非常好的select,因为它提供了一个易于使用的键/值方法。 这两个库为客户端上的SQL数据库提供了一个完整的解决scheme。
另一个不错的存储库是jstorage 。 它可以用来保存客户端上的“sql.js”的数据。 它支持各种各样的浏览器(包括移动浏览器,IE7和IE7!),甚至可以保持浏览器崩溃。
如果您正在Windows中运行特权脚本(在HTA或WSH中),则可以使用“ADODB.Recordset”ActiveXObject访问ODBC数据源。
如果你在网页上谈论客户端,上面的post是:Google Gears是你最好的select。
你可以在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 …效果很好。
JayData还提供了一个使用JavaScript的sqLite / webSql工具包。 你需要一个浏览器,Rhine或者Nodejs来运行。