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
大大您好:
回覆刪除不好意思,我是新手,想請問connection string的部分,是不是都是寫入mysql的:
username、 password、 host name、 port、databases沒錯?應該不是寫入ftp的吧?
然後我mysql hostname的部分給的不是ip說,是一個網址,應該也沒關係吧?
現在一直出現「無法建立資料庫連線,請檢查連線字串、使用者名稱和密碼。 (第 3 行,檔案名稱:程式碼)」
好像是 var conn = Jdbc.getConnection這個部分有問題,不知道是什麼原因說
作者已經移除這則留言。
刪除原則上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);
}
...
QQ還是不行,
回覆刪除請問大大我方便私給你我個人的ByetHost帳密
煩請大大幫我看一下麼? >"<
您可以寄信給我: simonsu.mail@gmail.com
刪除大大您好,資料已傳送(hgfhhshgg@gmail.com)
刪除