2013-10-11 49 views
2

以前在Google Apps腳本的腳本中,我打開並關閉了所有函數中的Jdbc連接。如何在谷歌應用程序腳本中建立連接?

爲了加快我的應用程序,將連接保持打開並在另一個函數中使用它似乎更好。但是,我不知道如何在Google Apps腳本中這樣做。

任何人都可以給我一個建議或例子嗎?

+0

謝謝!這對我非常有幫助。 – pjsm

+0

對不起,您需要將其保留在ScriptDB中。 CacheService只保留字符串值。 –

+0

我建立了解決方案波紋管。 –

回答

0

以下是如何在ScriptDB中保留連接的示例。

function myFunction() { 
    var conn = ScriptDb.getMyDb().query({name : "my_connection"}); 
    var connection = null; 
    var itemId = null; 

    if(conn.getSize() == 0) { 
    Logger.log(" Connection not found, creating new one"); 
    connection = Jdbc.getConnection('jdbc:mysql://<host>:3306/<instance>', 'user', 'password'); 
    itemId = ScriptDb.getMyDb().save({name : "my_connection", connection : connection}).getId(); 

    }else { 
    Logger.log(" Connection found, retrieving "+conn.getSize()); 
    var dbItem = conn.next(); 
    connection = dbItem.connection; 
    itemId = dbItem.getId(); 
    } 

    //Check if it is closed 
    if(connection.isClosed()) { 
    connection = Jdbc.getConnection('jdbc:mysql://<host>:3306/<instance>', 'user', 'password'); 

    //After opening remember to save to dabatase again and retain only one connection 
    ScriptDb.getMyDb().removeById(itemId); 
    ScriptDb.getMyDb().save({name : "my_connection", connection : connection}); 
    } 

    //Use your connection here 

    //Remenber to close it based in some criteria 
} 

示例here

+0

非常感謝。我認爲這對我有很大的幫助。我仍然有一個問題:是否將它保留在ScriptDB中是不可避免的? – pjsm

+0

我想這是唯一的方法。谷歌表示,測試連接是否有效的時間與打開一個新連接類似,因此他們建議始終打開一個新連接,但正如你發現的那樣,並不是那樣。如果這個答案幫助你,請豎起大拇指! :) –

+0

嗨, 今天我工作的聯合事項。實際上,這是一個非常好的和創造性的連接池方式。但問題是,scriptDb無法保存Jdbc連接。它說:價值不是一個數字,字符串,布爾等。這是一個不可避免的問題,或者你有這方面的一些建議? 我發現在prepareStatement方法中有一個'setPooled(boolean)'方法。不知何故,這不是一個可能的解決方案嗎?其實,我有點卡住這個。 – pjsm

相關問題