跳到主要內容

Apps Script連線MySQL或CloudSQL

Apps Script中連線資料庫也是使用jdbc connection string的方式來連結
感覺起來這邊似乎背後是透過GAE(畢竟也是Java Base的)來連線...(純猜的...)
下面先看看透過Apps Script來連線一般MySQL資料庫的方法:

function testMySQL(){
  var conn = Jdbc.getConnection('jdbc:mysql://DB_IP_ADDRESS:DB_PORT/DB_NAME', 'USERNAME', 'PASSWORD');
 
  var stmt = conn.createStatement();
  stmt.setMaxRows(100);
  var start = new Date();
  var sql = "select * from customers";
  var rs = stmt.executeQuery(sql);
  Logger.log('SQL:' + sql);
  while(rs.next()){
    Logger.log('['+new Date().toString() + ']' + rs.getString(1) + '::' + rs.getString(2) );
  }
}

上面範例中connection string的部份,DB_IP_ADDRESS為資料庫的IP位置,DB_PORT為資料庫的連線埠號,記得也把USERNAME與PASSWORD也改一下唷∼
連線建立完成後,後面的操作也與Java版本相仿
透過建立statement之後,使用statment實體執行sql語句
最後透過result set將值fetch出來...

而Google的Cloud SQL也一樣可以在Apps Script中進行操作
操作之前,先了解一些資訊....
在新的API Console中,我們可以找到Instance ID,這個值之後建立connection string時候需要填入



上面設定好後,可以使用這個function來連線CloudSQL,其中INSTANCE_ID就是上圖的Instance ID位置的值:

function testCloudSQL(){
  var conn = Jdbc.getCloudSqlConnection("jdbc:google:rdbms://INSTANCE_ID/DB_NAME");

  var stmt = conn.createStatement();
  stmt.setMaxRows(100);
  var start = new Date();
  var sql = "select * from customers";
  var rs = stmt.executeQuery(sql);
  Logger.log('SQL:' + sql);
  while(rs.next()){
    Logger.log('['+new Date().toString() + ']' + rs.getString(1) + '::' + rs.getString(2) );
  }
}

建好Function之後,執行當下Google會要求權限授與,讓Apps Script可以存取Google SQL Service instance...等



授與權限之後,就可以完成Script的執行...

以上,連線Remote MySQL部分比較不是問題
但是連線CloudSQL部分則有更進階的權限控管
這部份是因為CloudSQL的權限問題...
說實在的,目前Google的PaaS服務連線CloudSQL似乎還不是很"通暢"
尤其是跨帳號的資料庫存取
時常造成無法連線....
不過上面範例,只要在同帳號下執行
原則上是沒有問題的 :D

留言

  1. 大大您好:
    不好意思,我是新手,想請問connection string的部分,是不是都是寫入mysql的:
    username、 password、 host name、 port、databases沒錯?應該不是寫入ftp的吧?

    然後我mysql hostname的部分給的不是ip說,是一個網址,應該也沒關係吧?
    現在一直出現「無法建立資料庫連線,請檢查連線字串、使用者名稱和密碼。 (第 3 行,檔案名稱:程式碼)」
    好像是 var conn = Jdbc.getConnection這個部分有問題,不知道是什麼原因說

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 原則上connection string的這串:jdbc:google:rdbms://INSTANCE_ID/DB_NAME
      可以改成使用一般java的jdbc連線字串,可以參考這個...

      https://developers.google.com/apps-script/guides/jdbc

      大致上是這段...

      // Replace the variables in this block with real values.
      var address = 'database_IP_address';
      var rootPwd = 'root_password';
      var user = 'user_name';
      var userPwd = 'user_password';
      var db = 'database_name';

      var root = 'root';
      var instanceUrl = 'jdbc:mysql://' + address;
      var dbUrl = instanceUrl + '/' + db;

      // Create a new database within a Cloud SQL instance.
      function createDatabase() {
      var conn = Jdbc.getConnection(instanceUrl, root, rootPwd);
      conn.createStatement().execute('CREATE DATABASE ' + db);
      }
      ...

      刪除
  2. QQ還是不行,
    請問大大我方便私給你我個人的ByetHost帳密
    煩請大大幫我看一下麼? >"<

    回覆刪除
    回覆
    1. 您可以寄信給我: simonsu.mail@gmail.com

      刪除
    2. 大大您好,資料已傳送(hgfhhshgg@gmail.com)

      刪除

張貼留言

這個網誌中的熱門文章

透過Google Apps Script結合Google Form做即時郵件通知

體驗過Google Apps Script的功能後,也發現他結合GmailApps的模組 GmailApps的應用可以用在表單填寫完成後,做發信的通知 例如您開立了一個訂購的表單,為了要在第一時間通知商家有訂單進入 就可以直接呼叫Gmail做發信的通知,讓手持Smart Phone的我們可以很快的知道生意上門了! 下面規劃三個function,其中: onCommit():為form commit時候觸發的function,需要掛載於form commit trigger上 jsonArrToTable():目的將json array解析成為一個Table getLastRowTable():目的將整個table的回傳過濾為剩下第一筆(表頭,含有Form的欄位說明)與最後一筆(原則上就是剛剛送出的那一筆表單) 完整程式碼如下: function onCommit(){   var sheet = SpreadsheetApp.getActiveSheet();   var rows = sheet.getDataRange();   var numRows = rows.getNumRows();   var values = rows.getValues();   var content = getLastRowTable(values);   var htmlBody = "Hi Admin: <br/><br/>有訂單拉,檢查一下吧! <br/><br/>" + content + '<br/><br/>Send by Google Apps';   GmailApp.sendEmail(     " your-email-address@gmail.com ",      "Order Confirm Notice",      htmlBody,      {from: ' from-email-...

Share a chrome plugin for manage google cloud platform

好玩意兒報報.... 同事的新作,把Google Project List在Chrome Plugin中! 對一次管理多個專案的人來說,真得超方便的拉! 下載: https://chrome.google.com/webstore/detail/gdclauncher/bicgkglnnilldakpenngnblekooejnpg 使用說明: 1. Use browser url bar to quick search: Type "gdcl" in browser Press "TAB" to start search Type the project id key word then select the search result... 2. Using quick launch bar... You can search by keyword or click project name to go to the project or gae link to go to gae or go to billing page....

Cloud Monitor嚐鮮

GCP上,我們非常想要的一個功能,終於問世.... Cloud Monitor來了!