JdbcサービスによるGoogle Cloud SQLの利用 (6/6)
作成:2013-01-26 13:58
更新:2013-01-26 13:58
更新:2013-01-26 13:58
■JdbcPrepareStatementでレコードを追加する
続いて、テーブルのレコード操作に関する処理を行なってみましょう。例として、「レコードの追加」を行います。
レコードの追加・更新・削除といった操作は、レコードの検索とは異なるやり方で処理を行います。これらは何かの情報を引き出すことが目的ではなく、データベースに何らかの操作を行うためのものなので、処理の仕方が違うのです。
今回、紹介するやり方は、実はけっこう面倒くさいやり方です。Jdbcサービスのオブジェクト類を見てみると、もっとシンプルに実装できそうなメソッドも用意されているのですが、Cloud SQLで何度か試ても、それらがうまく機能しませんでした。というわけで、現時点で動作確認できている方法を紹介しておきます。
1. JdbcConnectionの作成
2. クエリーのテキストを用意
この?記号は、値が組み込まれる場所を示す特殊な記号です。これで場所を確保しておき、この後でこの?部分に値を組み込んでいくのです。
3. JdbcPrepareStatementの用意
4. 「?」部分に値を組み込む
ひと通りの設定が完了したら、「addBatch」を呼び出します。これにより、setObjectによる修正情報が追加されます。「あるJdbcPrepareStatementで必要なsetObjectがすべて完了したらaddBatchすると設定が反映される」と考えておくと良いでしょう。
5. 修正を実行する
6. リソースを開放する
――ここではレコードの追加を行いましたが、追加・更新・削除は、基本的にここで行ったやり方で行えます。ポイントを整理するなら、
・JdbcPrepareStatementを作成する。
・setObjectで値を設定し、addBatchする。
・全て済んだら、executeBatchで実行。
というやり方ですね。他のJdbcConnectionの作成やリソースの開放などはレコード取得と同じです。ちょっと面倒臭いですが、流れさえわかれば決して難しいことはありません。
※註――実は、JdbcPrepareStatementを使わなくとも、JdbcStatementだけでもっとシンプルに実行する方法はあるようです。JdbcStatementには「exeuteUpdate」というメソッドがあり、そのドキュメントに「追加・更新・削除などに使う」と書かれています。が、Cloud SQLではこれらがうまく機能しないようです。やり方が違うのかもしれませんが、Cloud SQLは使えないのかも知れません。あるいはアップデートで使えるようになる可能性もあるでしょう。このあたりは、新たな展開があれば追記するつもりです。
レコードの追加・更新・削除といった操作は、レコードの検索とは異なるやり方で処理を行います。これらは何かの情報を引き出すことが目的ではなく、データベースに何らかの操作を行うためのものなので、処理の仕方が違うのです。
今回、紹介するやり方は、実はけっこう面倒くさいやり方です。Jdbcサービスのオブジェクト類を見てみると、もっとシンプルに実装できそうなメソッドも用意されているのですが、Cloud SQLで何度か試ても、それらがうまく機能しませんでした。というわけで、現時点で動作確認できている方法を紹介しておきます。
1. JdbcConnectionの作成
var conn = Jdbc.getCloudSqlConnection(db);これは、先のサンプルと同じです。最初にこのオブジェクトを用意するのはJdbc利用の基本中の基本です。
2. クエリーのテキストを用意
var query = "insert into persondata (name,mail) values (?,?)";実行するSQLのクエリー文を用意します。ここで注意したいのは、最後の方にある「?」記号です。レコードの追加などの操作を行うときは、SQLのクエリー内に必要に応じて値を設定して実行するような形で処理するのが一般的です。
この?記号は、値が組み込まれる場所を示す特殊な記号です。これで場所を確保しておき、この後でこの?部分に値を組み込んでいくのです。
3. JdbcPrepareStatementの用意
var stmt = conn.prepareStatement(query);クエリーの実行は、JdbcStatementではなく、JdbcPrepareStatementというオブジェクトを使います。これはあらかじめオブジェクトを作成しておき、いろいろと操作や編集をしてから(この間、クエリーは実行されない)、最後にクエリー実行する、というような使い方をするのに用いられます。
4. 「?」部分に値を組み込む
stmt.setObject(1, name_str);クエリーの「?」部分に値を設定していきます。これは「setObject」というメソッドで行えます。第1引数に設定する?の番号(最初が1番になる)を、そして第2引数に設定する値をそれぞれ用意します。
stmt.setObject(2, mail_str);
stmt.addBatch();
ひと通りの設定が完了したら、「addBatch」を呼び出します。これにより、setObjectによる修正情報が追加されます。「あるJdbcPrepareStatementで必要なsetObjectがすべて完了したらaddBatchすると設定が反映される」と考えておくと良いでしょう。
5. 修正を実行する
stmt.executeBatch();executeBatchにより、addBatchされた修正情報などをすべて実行します。つまり、ここでクエリーが実行され、データベースが操作されることになります。
6. リソースを開放する
stmt.close();最後に、利用したオブジェクトのcloseを順に呼び出してリソースを開放すれば終了です。
conn.close();
――ここではレコードの追加を行いましたが、追加・更新・削除は、基本的にここで行ったやり方で行えます。ポイントを整理するなら、
・JdbcPrepareStatementを作成する。
・setObjectで値を設定し、addBatchする。
・全て済んだら、executeBatchで実行。
というやり方ですね。他のJdbcConnectionの作成やリソースの開放などはレコード取得と同じです。ちょっと面倒臭いですが、流れさえわかれば決して難しいことはありません。
※註――実は、JdbcPrepareStatementを使わなくとも、JdbcStatementだけでもっとシンプルに実行する方法はあるようです。JdbcStatementには「exeuteUpdate」というメソッドがあり、そのドキュメントに「追加・更新・削除などに使う」と書かれています。が、Cloud SQLではこれらがうまく機能しないようです。やり方が違うのかもしれませんが、Cloud SQLは使えないのかも知れません。あるいはアップデートで使えるようになる可能性もあるでしょう。このあたりは、新たな展開があれば追記するつもりです。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
var db = "jdbc:google:rdbms://<インスタンス>/mydb"; function addRow(){ var name_str = Browser.inputBox("Name"); var mail_str = Browser.inputBox("Mail"); var conn = Jdbc.getCloudSqlConnection(db); var query = "insert into persondata (name,mail) values (?,?)"; var stmt = conn.prepareStatement(query); stmt.setObject(1, name_str); stmt.setObject(2, mail_str); stmt.addBatch(); stmt.executeBatch(); stmt.close(); conn.close(); Logger.log("close"); Browser.msgBox("登録しました。"); }
※関連コンテンツ
「Google Apps Scriptプログラミング [中級編]」に戻る