2015-01-21 42 views
2

我可以使用 - input type =「file」讀取文件上傳時,但我想從硬編碼路徑讀取SQLite文件。 sql.js的文檔提供了一個解決方案,如下所示,但我無法得到它的工作。請幫忙。使用sql.js從磁盤讀取SQLite數據庫

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可以回答這個問題的任何一個。
+1

你得到任何錯誤?我*假設*您正在使用nodejs(具有'readFileSync'和全部內容),所以您應該使用該標記問題 – CodingIntrigue 2015-01-21 11:57:54

+0

您的文件位於何處?如果它不在當前路徑中,則應該給出確切的路徑。但我認爲你已經做到了,是嗎? – mgokgoz 2015-01-21 12:08:34

+0

是的sql.js文檔中提供的示例使用Node.js,但有沒有更簡單的解決方案呢?也許只使用客戶端腳本,因爲我想在本地訪問文件。 – Div 2015-01-21 12:09:33

回答

2

可能是問題出在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 - 奇努克測試數據庫

更新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> 
+0

問題是,我將以Windows窗體的形式自行託管這個asp.net MVC應用程序。我仍然可以使用node.js嗎?或讓事情變得更簡單有什麼方法可以從客戶端的硬編碼文件路徑讀取文件? – Div 2015-01-22 04:08:48

+0

1)您可以使用iisnode包(https://github.com/tjanczuk/iisnode)在ASP.NET下託管Node.js。 2)如果你想在客戶端上讀取Sqlite(在瀏覽器中),那麼你需要一個不同的代碼結構,就像例子http://alasql.org/demo/016sqlite/(我發佈了新的代碼作爲更新這個答案): – agershun 2015-01-22 04:29:59

+0

3)如果你需要指定瀏覽器的服務器文件路徑,你需要設置你的HTTP服務器(IIS或Node.js)來映射來自「http:// mysite/mypath/myfile」的路徑。 sqlite「到你的服務器路徑,如」/myserverpath/path/path/myfile.sqlite「。此設置取決於您的Web服務器 – agershun 2015-01-22 04:40:21