2015-05-25 64 views
3

我正在構建一個將連接到oracle數據庫的NodeJS應用程序。NodeJS:如果不關閉oracle連接會發生什麼

我想知道如果我不關閉連接,並且我多次調用fiftycent()函數會發生什麼?

var i=50; 
function fiftycent() { 
var oracledb = require('oracledb'); 

oracledb.getConnection(
    { 
    user   : "hr", 
    password  : "welcome", 
    connectString : "localhost/XE" 
    }, 
    function(err, connection) 
    { 
    if (err) { 
     console.error(err.message); 
     return; 
    } 
    connection.execute(
     "SELECT department_id, department_name " 
    + "FROM departments " 
    + "WHERE department_id = :did", 
     [180], 
     function(err, result) 
     { 
     if (err) { 
      console.error(err.message); 
      return; 
     } 
     console.log(result.rows); 
     }); 
    }); 
i=i-1; 
if (i>0) fiftycent(); 
} 

節點服務器在幾天內運行後,會導致內存故障或類似的東西?

請注意這個例子中的一部分是從https://github.com/oracle/node-oracledb採取和它們不包括

connection.release(function(err){ 
if (err) console.error(err.message); 
}); 
在他們的代碼

在此先感謝您的答案。

回答

3

每當你打電話給getConnection它創建一個新的(完整)連接到你的數據庫。如果你不打電話release它可能會導致你的應用程序內存泄漏,因爲連接仍然被分配。也許取決於你的數據庫服務器設置,你可以達到打開連接總數的最大值。

在這種情況下,最好將連接集中在connection pool。撥打release將返回連接池,並使其可用於其他呼叫。

所有示例都使用release函數釋放連接。看一看here

+0

謝謝你的回答。你是對的 ! 經過一些測試,我得到了這個錯誤: TNS-12516 TNS:偵聽器無法找到匹配協議棧的實例。 你有一些「連接池」的例子嗎? – BlackMatrix

+0

連接池有一個完整的Web應用程序示例:https://github.com/oracle/node-oracledb/blob/250ef9c82db89cf3bdb42b057f596425f601da39/examples/webapp.js 有關池的文檔是https://github.com/oracle /node-oracledb/blob/250ef9c82db89cf3bdb42b057f596425f601da39/doc/api.md#-4-pool-class – staaar

+0

你好!非常感謝。 我是一個新人,我正在研究你的例子的腳本,並對如何將pool connexion應用到我的需求進行一些搜索。 首先我感謝你,我的問題解決後我會回來 – BlackMatrix

相關問題