可能是問題出在sql.js
和test.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 - 奇努克測試數據庫
更新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>
你得到任何錯誤?我*假設*您正在使用nodejs(具有'readFileSync'和全部內容),所以您應該使用該標記問題 – CodingIntrigue 2015-01-21 11:57:54
您的文件位於何處?如果它不在當前路徑中,則應該給出確切的路徑。但我認爲你已經做到了,是嗎? – mgokgoz 2015-01-21 12:08:34
是的sql.js文檔中提供的示例使用Node.js,但有沒有更簡單的解決方案呢?也許只使用客戶端腳本,因爲我想在本地訪問文件。 – Div 2015-01-21 12:09:33