みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
GASからJDBCサービスを使ってCloud SQLのデータベースにアクセスする方法をシリーズでお伝えしています。
前回の記事はこちら。
GASからCloud SQLのデータベースにレコード追加のSQLを実行する方法をお伝えしました。
レコード追加をしましたから、あとは更新と削除ができれば、一通りのレコードの操作はできるということになりますね。
ということで、今回はGASのJDBCサービスを使って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); var statement = connection.createStatement(); var results = statement.executeQuery('SELECT * FROM entries'); while (results.next()) { var entryID = results.getInt('entryID'); var guestName = results.getString('guestName'); var content = results.getString('content'); Logger.log('%s t %s t %s', entryID, guestName, content); } results.close(); statement.close(); connection.close(); } function writeOneRecord() { var connection = Jdbc.getCloudSqlConnection(url, userName, password); var statement = connection.prepareStatement('INSERT INTO entries (guestName, content) values (?, ?)'); statement.setString(1, 'Third Guest'); statement.setString(2, 'I just got here too!'); var count = statement.executeUpdate(); Logger.log(count); statement.close(); connection.close(); }
関数readFromTableと、関数writeOneRecordの2つの関数がありますが、いずれもCloud SQLの「guestbook」というデータベースの、テーブル「entries」を操作するものです。
関数readFromTableはテーブルの各カラムのデータをSELECT文で取得してログ出力するもの、関数writeOneRecordはテーブルにベタ書きのレコードを1行追加するというものです。
CRUDとは
「CRUD」という言葉があります。
これは、データベースアプリケーションが持つべき4つの基本機能のイニシャルを並べた用語で、その4つとは以下のとおりです。
用語 | 操作 | SQL |
---|---|---|
Create | 生成 | INSERT |
Read | 読み取り | SELECT |
Update | 更新 | UPDATE |
Delete | 削除 | DELETE |
SQLでいうと、INSERT文とSELECT文はこれまでに紹介してきました。
あと、残るUPDATE文によるレコードの更新と、DELETE文によるレコードの削除ができれば、基本機能は押さえることができるということになります。
UPDATE文でレコードを更新する
レコードの値を変更するには、SQLのUPDATE文を使います。
WHEREとその後の「条件」の部分を「WHERE句」といい、それにマッチしたレコードを更新の対象とします。WHERE句を省略した場合は、すべてのレコードが対象になります。
そして対象のレコードに対して、SET以降に指定した「カラム名=値」に従って、値を上書きします。この部分を「SET句」といいます。
レコードを更新するスクリプト
GASでCloud SQLのデータベースに対してSQLのUPDATE文を実行するスクリプトを作りました。
function updateOneRecord() { var connection = Jdbc.getCloudSqlConnection(url, userName, password); var statement = connection.prepareStatement('UPDATE entries SET guestName=?, content=? WHERE entryID=?'); statement.setString(1, 'third guest'); statement.setString(2, 'I just got here too!!!!!'); statement.setInt(3, 3); var row = statement.executeUpdate(); Logger.log(row); statement.close(); connection.close(); }
WHERE句の条件には、プライマリーキーとしていたカラム「entryID」を設定すると、一意に決まりますね。
JdbcPreparedStatementオブジェクトの3つのプレースホルダーに設定する場合は、INT型でしたからsetIntメソッドを使用しています。
レコード更新の実行確認
では、レコード更新の実行確認をしていきます。
上記、updateOneRecord関数を実行してから、readFromTable関数を実行して、テーブル内を確認しました。
以下のようにログが出力されます。
条件に指定したentryIDが3のレコードの値が更新されていることを確認できます。
DELETE文でレコードを削除する
続いて、レコードの削除について見ていきましょう。
レコードを削除するには、SQLのDELETE文を使います。
WHERE句の条件にマッチしたレコードを削除します。WHERE句を省略した場合は、すべてのレコードが対象になります。
レコードを削除するスクリプト
GASでCloud SQLのデータベースに対してSQLのDELETE文を実行するスクリプトを作りました。
function deleteOneRecord() { var connection = Jdbc.getCloudSqlConnection(url, userName, password); var statement = connection.prepareStatement('DELETE FROM entries WHERE entryID=?'); statement.setInt(1, 2); var row = statement.executeUpdate(); Logger.log(row); statement.close(); connection.close(); }
JdbcPreparedStatementオブジェクトのプレースホルダーには1つだけなので、setIntメソッドをひとつ実行すれば、SQLが完成します。
レコード削除の実行確認
では、レコード更新の実行確認をしていきます。
上記のdeleteOneRecord関数を実行してから、readFromTable関数を実行して、テーブル内を確認してみましょう。
setIntメソッドで指定した、entryIDが2のレコードが削除されていることが確認できますね。
まとめ
以上、GASのJDBCサービスを使ってCloud SQLのデータベースのレコードを更新・削除をする方法をお伝えしました。
SQL文を作るのに注意が必要ですが、基本的には同じようなスクリプトを使い回せますね。
さて、次回は更新系の複数のSQL文をまとめて実行する方法について見ていきましょう。
どうぞお楽しみに!
連載目次: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を一括で実行する方法