みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASからJDBCサービスを使ってCloud SQLのデータベースにアクセスする方法をシリーズでお伝えしています。
前回の記事はこちら。
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オブジェクトを作成することができます。
ですから、以下のようにするわけですね。
var statement = connection.createStatement();
クエリを実行する
続いて、JdbcStatementオブジェクトを使って、SQLステートメントを実行します。
今回は、データベースからデータを取得したいわけですが、その場合SELECT文で色々と条件を設定したSQLを実行します。
このSELECT文によりデータを取得する命令を、「クエリ」と言ったりしますね。
そのクエリを実行する役割を果たすのが、executeQueryメソッドです。
引数に、SQLを文字列として指定すると、データベースに対してそのSQLを実行します。
なお、戻り値はそのSQLの実行結果を表すJdbcResultSetオブジェクトを返します。
例えば、以下のようにすることで、現在のデータベースのテーブル「entries」のすべてのレコードを取り出すことができます。
var results = statement.executeQuery('SELECT * FROM entries');
ところで、データの取得ではなく、データの更新、追加、削除など他のSQLをを使う場合には、executeQueryメソッドではなく他のメソッドを使います。
それについては、シリーズのどこかで別途お伝えしますね。
JdbcResultSetオブジェクト・JdbcStatementオブジェクトを閉じる
JdbcResultSetオブジェクトおよびJdbcStatementオブジェクトは、スクリプト終了後にJdbcConnectionオブジェクトと同様、自動で閉じるとされています。
ただ、これらも明示的に閉じる操作をしたほうが良いと推奨されているので、以下closeメソッドでそれぞれ閉じるようにしましょう。
接続したデータベースにクエリを実行するコード
では、これまでのまとめです。
まとめると以下のコードのようになります。
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の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を一括で実行する方法