lov*_*soa 17
如果要从Web浏览器中访问SQLite数据库,则没有多少解决方案.
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>
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);
Mik*_*one 11
好吧,如果您正在使用客户端JavaScript,我认为您将失去运气......浏览器倾向于沙盒化JavaScript环境,因此您无法以访问数据库等任何通用容量访问该计算机.
如果您正在讨论从客户端访问的服务器端的SQLite数据库,您可以设置一个AJAX解决方案,调用某些服务器端代码来访问它.
如果您正在讨论Rhino或其他服务器端JavaScript,您应该查看宿主语言对SQLite的API访问(例如Rhino的JDBC).
或许澄清一下你的问题......?
Ceb*_*yre 11
Google Gears有一个内置的sqlite数据库 - 但如果你打算依赖它,你需要确保人们安装它.
根据您的具体情况,您可以强制执行安装,否则您应该将其视为一个很好的,但要优雅地降级,以便在未安装的情况下网站仍然有效.
小智 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
| 归档时间: | 
 | 
| 查看次数: | 73474 次 | 
| 最近记录: |