GASのJDBCサービスでCloud SQLデータベースにクエリを実行する方法


execute

photo credit: Marcin Wichary Execute via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

GASからJDBCサービスを使ってCloud SQLのデータベースにアクセスする方法をシリーズでお伝えしています。

前回の記事はこちら。

GASのJDBCサービスでCloud SQLデータベースに接続をする方法
GASからJDBCサービスを使ってCloud SQLのデータベースにアクセスする方法をシリーズでお伝えしています。今回は、実際にJDBCサービスでデータベースに接続をして、その接続を確認していきます。

GASのJDBCサービスと、それによるCloud SQLのデータベースへの接続についてお伝えしました。

ただ、まだデータベースに接続しただけで、データベースの操作をしたわけではありませんでした。

今回は、接続したデータベースに対してSQLのSELECT文によるクエリを実行する方法をお伝えしていきます。

GASのJDBCサービスでCloud SQLデータベースにクエリを実行する方法です。

では、行ってみましょう!

前回のおさらい

前回のコードはこちらです。

実行すると、指定のデータベースに接続し、「カタログ名」(MySQLの場合はデータベース名)がログで確認できます。

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();
}

データベース接続名は、GCPのCloud SQLを開けば取得可能です。

あとは、データベース名(今回のシリーズでは「guestbook」)、Cloud SQLインスタンスで設定したユーザー名とパスワードです。

さて、データベースの接続が完了しました。

JDBCサービスでは、接続したデータベースに対してSQLのSELECT文を実行することができますので、以降でその方法を見ていきましょう。

JdbcStatementオブジェクトを作成する

SQLのステートメントを操作する役割を果たすのが、JdbcStatementオブジェクトです。

データベースへの接続を表すJdbcConnectionオブジェクトに対して、createStatementメソッドを使うことでJdbcStatementオブジェクトを作成することができます。

JdbcConnectionオブジェクト.createStatement()

ですから、以下のようにするわけですね。

var statement = connection.createStatement();

クエリを実行する

続いて、JdbcStatementオブジェクトを使って、SQLステートメントを実行します。

今回は、データベースからデータを取得したいわけですが、その場合SELECT文で色々と条件を設定したSQLを実行します。

このSELECT文によりデータを取得する命令を、「クエリ」と言ったりしますね。

そのクエリを実行する役割を果たすのが、executeQueryメソッドです。

JdbcStatementオブジェクト.executeQuery(SQL)

引数に、SQLを文字列として指定すると、データベースに対してそのSQLを実行します。

なお、戻り値はそのSQLの実行結果を表すJdbcResultSetオブジェクトを返します。

例えば、以下のようにすることで、現在のデータベースのテーブル「entries」のすべてのレコードを取り出すことができます。

var results = statement.executeQuery('SELECT * FROM entries'); 

ところで、データの取得ではなく、データの更新、追加、削除など他のSQLをを使う場合には、executeQueryメソッドではなく他のメソッドを使います。

それについては、シリーズのどこかで別途お伝えしますね。

JdbcResultSetオブジェクト・JdbcStatementオブジェクトを閉じる

JdbcResultSetオブジェクトおよびJdbcStatementオブジェクトは、スクリプト終了後にJdbcConnectionオブジェクトと同様、自動で閉じるとされています。

ただ、これらも明示的に閉じる操作をしたほうが良いと推奨されているので、以下closeメソッドでそれぞれ閉じるようにしましょう。

JdbcResultSetオブジェクト.close()
JdbcStatementオブジェクト.close()
JDBC  |  Apps Script  |  Google Developers

接続したデータベースにクエリを実行するコード

では、これまでのまとめです。

まとめると以下のコードのようになります。

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);
  var statement = connection.createStatement();
  var results = statement.executeQuery('SELECT * FROM entries'); 
  
  //結果を取り出す処理

  results.close();
  statement.close();
  connection.close();
}

結果を取り出す処理については、次回で紹介していきます。

まとめ

以上、GASのJDBCサービスでCloud SQLデータベースにクエリを実行する方法をお伝えしました。

使用するオブジェクトが多くて面倒に思えるかもしれませんが、JdbcConnectionオブジェクトオブジェクトとJdbcStatementオブジェクトについて、それぞれの役割を確認しておいてください。

JdbcResultSetオブジェクトについては、次回その中身を解き明かしていきます。

GASのJDBCサービスでCloud SQLにクエリを実行した結果を取り出す方法
GASからJDBCサービスを使ってCloud SQLのデータベースにアクセスする方法をシリーズでお伝えしています。今回はGASのJDBCサービスでCloud SQLにクエリを実行した結果を取り出す方法です。

どうぞお楽しみに!

連載目次:GASのJDBCサービスでCloud SQLのDBを操作する

GASのデータベースの多くはスプレッドシートを使用しますが、ちゃんとしたデータベースを使用したい場合があります。そこで、JBDCサービスを使ってCloud SQLを使用する方法をシリーズでお伝えしていきます。
  1. GASのデータベースとして、なぜCloud SQLが有効なのか?その概要とメリット
  2. GASでデータベースとして使用するCloud SQLインスタンスを作成する方法
  3. GCPのCloud Shellを使ってCloud SQLインスタンスに接続する方法
  4. GCPのCloud SQLインスタンスにSQL文でデータベースを作成する方法
  5. GCPのCloud SQLデータベースにSQLでテーブルを作成する方法
  6. GCPのCloud SQLデータベースのテーブルにSQLでレコードを追加する方法
  7. GASのJDBCサービスでCloud SQLデータベースに接続をする方法
  8. GASのJDBCサービスでCloud SQLデータベースにクエリを実行する方法
  9. GASのJDBCサービスでCloud SQLにクエリを実行した結果を取り出す方法
  10. GASのJBDCサービスでCloud SQLのデータベースにレコードを追加する方法
  11. GASのJDBCサービスでCloud SQLのデータベースに複数のSQLを一括で実行する方法

  投稿者プロフィール

タカハシノリアキ株式会社プランノーツ 代表取締役
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。

タイトルとURLをコピーしました