javascript - 使用 sql.js 从磁盘读取 SQLite 数据库

标签 javascript sqlite

我可以在使用 - input type="file"上传文件时读取文件,但我想从硬编码路径读取 SQLite 文件。 sql.js 的文档确实提供了如下所示的解决方案,但我无法使其正常工作。请帮忙。

var fs = require('fs');
var SQL = require('sql.js');
var filebuffer = fs.readFileSync('test.sqlite');
// Load the db
var db = new SQL.Database(filebuffer);
  • 我希望它非常简单,任何使用 sql.js 的人都能回答这个问题。

最佳答案

问题可能出在 sql.jstest.sqlite 文件的位置。如果将它们放在同一目录中,请将名称写为 './sql.js' './test.sqlite' 用点和斜杠:

var fs = require('fs');
var SQL = require('./sql.js');
var data = fs.readFileSync('./Chinook_Sqlite.sqlite');
var sqldb = new SQL.Database(data);

我只是运行了上面的代码,它在 Node.js (node test.js) 上运行良好。我的目录有以下文件:

  • test.js - 来自上述示例的文件
  • sql.js - 库文件
  • Chinook_Sqlite.sqlite - Chinook 测试数据库

更新 2 来自 SQL.js 的人建议将此代码(参见 SQL.js wiki)用于最新版本的 SQL.js:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/database.sqlite', true);
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
    var uInt8Array = new Uint8Array(this.response);
    var db = new SQL.Database(uInt8Array);
    var contents = db.exec("SELECT * FROM my_table");
    // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]
};
xhr.send();

更新 1 如果您需要在浏览器中打开 SQLite 文件,您可以使用下面的代码(参见工作示例 here):

<script src="sql.js"></script>
<script>
    function loadBinaryFile(path,success) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", path, true); 
        xhr.responseType = "arraybuffer";
        xhr.onload = function() {
            var data = new Uint8Array(xhr.response);
            var arr = new Array();
            for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
            success(arr.join(""));
        };
        xhr.send();
    };

    loadBinaryFile('./Chinook_Sqlite.sqlite', function(data){
        var sqldb = new SQL.Database(data);
        // Database is ready
        var res = db.exec("SELECT * FROM Genre");
    });
</script>

关于javascript - 使用 sql.js 从磁盘读取 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28066570/

相关文章:

java - 从java中的数组列表中检索多个值

javascript - 使用 AngularJS/Phaser.io 进行游戏并销毁方法

javascript - Modal 出现在 Chrome/Firefox 上,但没有出现在 safari 上?

android - Loader<Cursor> 只加载选定的行+下一行

Android SQLite 条件在轮类期间失败更改

ios - 如何修复 sqlite3 libversion 不匹配

android - 如何使用 ORMLite 正确注释继承类?

javascript - 如何在不信任远程服务器的javascript的情况下使用firebase?

javascript - Protractor 通过 ng-click 进行迭代

javascript - 使用 JQuery 调整 Div 的大小以匹配窗口尺寸