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