みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASからJDBCサービスを使ってCloud SQLのデータベースにアクセスする方法をシリーズでお伝えしています。
前回の記事はこちら。
Cloud SQLのデータベースにSQLでレコードを追加する方法をお伝えしました。
これで、GCPでのCloud SQLの準備と、SQLに馴染むのは十分かなと思いますので、いよいよGASからCloud SQLを操作していきたいと思います。
今回は、GASのJDBCサービスでCloud SQLデータベースに接続をする方法です。
では、行ってみましょう!
前回のおさらい
これまで、以下のような手順で、データベースの準備を進めてきました。
GCPのプロジェクト配下にCloud SQLインスタンスを作成する
└Cloud SQL配下のインスタンスにデータベースを作成する
└データベースにテーブルを作成する
└テーブルにレコードを追加する
ここで、データベース名は「guestbook」、テーブル名は「entries」でした。
このデータベースにGASからアクセスしていきたいと思います。
JDBCサービスとは
外部のデータベースに接続する機能を提供するサービスとして、GASにはJDBCサービスが用意されています。
JDBCサービスはScript Servicesに含まれていますので、デフォルトで使用可能です。
「JDBC」…何のことやら、さっぱり予想がつきませんね、
これは「Java DataBase Connectivity」の略で、業界標準として「Javaによるプログラミング言語」と様々な種類のデータベースとの「接続」を提供するAPIです。
GASで提供されているJDBCサービスは、このAPIを利用して外部のデータベース接続を実現するものです。
詳しく知りたい方は、英語ですが、以下のドキュメントをそれぞれご覧ください。
GASからCloud SQLへの接続
このJDBCサービスですが、Cloud SQLのデータベースの接続については、専用のメソッドが用意されています。
その名もgetCloudSqlConnectionメソッドです。
このメソッドにより、データベースURLが示すデータベースに接続して、その接続を表すJdbcConnectionという種類のオブジェクトを返します。
データベースを操作する場合、この「接続」からスタートすることが多いので、覚えておくと良いかも知れません。
データベースURLの作り方
データベースURLですが、Cloud SQLでは以下のような作りになります。
データベース名は今回の場合は「guestbook」という名前でしたね。
インスタンス接続名ですが、これはGCPのナビゲーションメニュー > 「SQL」の画面で、すぐに確認できます。
何やら文字列と、リージョンと、インスタンス名がコロン記号「:」で結合された文字列です。
ユーザー名、パスワード
ユーザー名、パスワードは、Cloud SQLのインスタンス作成時に定めた「root」のものでも良いですし、GCPで新たなユーザーアカウントを追加することもできます。
GASからCloud SQLのデータベースに接続する
これで材料は揃いましたので、GASでCloud SQLのデータベースへの接続を試してみましょう。
コードはこちらです。
var connectionName = '*****データベース接続名*****'; //Instance_connection_name var userName = '*****ユーザー名*****'; //user_name var password = '*****パスワード*****'; //'user_password' var databaseName = 'guestbook'; //database_name var url = 'jdbc:google:mysql://' + connectionName + '/' + databaseName; function readFromTable() { var connection = Jdbc.getCloudSqlConnection(url, userName, password); Logger.log(connection.getCatalog()); connection.close(); }
(スクリプトとして、データベース接続名、ユーザー名、パスワードなどをベタ打ちするのはあまり望ましくないので、実際にはプロパティストアなどを用いてくださいね。)
実行すると、ログで以下のようにデータベース名の表示を確認できます。
どうやらきちんと接続できているようですね。
接続のカタログ名を取得する
10行目のgetCatalogメソッドですが、これはJdbcConnectionオブジェクトの「現在のカタログ名」を取得するものです。
カタログはデータベースの種類によって何を指すかが違うようですが、MySQLの場合はデータベースのことなので、つまり接続したデータベース名を返します。
データベース接続を閉じる
12行目のcloseメソッドは、接続を終了する命令です。
本来、スクリプトの実行が終了すると、JDBC接続は自動的に閉じるらしいのですが、GASの公式ドキュメントではcloseメソッドを明示的に使用することが推奨されています。
まとめ
以上、GASのJDBCサービスでCloud SQLデータベースに接続をする方法をお伝えしました。
データベースURLさえ作れれば、簡単に接続ができますね。
次回、接続したデータベースにクエリを実行してデータを取得します。
どうぞお楽しみに!
連載目次:GASのJDBCサービスでCloud SQLのDBを操作する
GASのデータベースの多くはスプレッドシートを使用しますが、ちゃんとしたデータベースを使用したい場合があります。そこで、JBDCサービスを使ってCloud SQLを使用する方法をシリーズでお伝えしていきます。- GASのデータベースとして、なぜCloud SQLが有効なのか?その概要とメリット
- GASでデータベースとして使用するCloud SQLインスタンスを作成する方法
- GCPのCloud Shellを使ってCloud SQLインスタンスに接続する方法
- GCPのCloud SQLインスタンスにSQL文でデータベースを作成する方法
- GCPのCloud SQLデータベースにSQLでテーブルを作成する方法
- GCPのCloud SQLデータベースのテーブルにSQLでレコードを追加する方法
- GASのJDBCサービスでCloud SQLデータベースに接続をする方法
- GASのJDBCサービスでCloud SQLデータベースにクエリを実行する方法
- GASのJDBCサービスでCloud SQLにクエリを実行した結果を取り出す方法
- GASのJBDCサービスでCloud SQLのデータベースにレコードを追加する方法
- GASのJDBCサービスでCloud SQLのデータベースに複数のSQLを一括で実行する方法