JdbcサービスによるGoogle Cloud SQLの利用 (5/6)
作成:2013-01-26 13:50
更新:2013-01-26 13:50
更新:2013-01-26 13:50
■テーブルのレコードをすべて取得する
では、データベースアクセスを行なってみましょう。まずは、レコードの一覧を取得し出力してみます。これは、実際にサンプルを見ながら説明しておきましょう。
下のリスト欄は、mydbテーブルの内容を最大100個まで取得し、その値をログに出力するサンプルです。ここでは変数dbにデータベースの指定を用意してありますので、これの値を随時書き換えて使ってください。では、データベースアクセスの流れを追っていきましょう。
1. JdbcConnectionの取得
2. JdbcStatementの作成
3. クエリーを実行する
4. nextによるレコードの繰り返し処理
JdbcResultSetオブジェクトは、内部に多数のレコード情報を持っています。そして「現在位置」の情報も併せ持っており、これにより「現在位置のレコード」の値を取り出すことができるようになっているのです。
作成されたばかりのとき、現在位置は一番最初のゼロ位置(ゼロ番目)にあります。nextが呼び出されると、最初のレコードの位置(1番目)に現在位置が移動します。これで、値を取り出すメソッドを呼び出すと、1つ目のレコードの値を取り出すことができます。そしてまたnextを呼び出すと2番目、更にnextすると3番目……。
こんな具合に、順にレコードの位置を移動しては、そのレコードの値を取り出す、ということを行なっていくわけです。最後にもうレコードが残ってないと、nextはfalseを返すため、whileから抜けることができます。
レコードの値は、「getString」というメソッドで取り出しています。これは引数に項目名を指定して呼び出します。あるいは番号を指定し、「○○番目のテキスト値」というようにして値を取り出すこともできます。値を取り出すためのメソッドには、以下のようなものがあります。例えば、この例ではIDの取得はgetIntのほうがよいかも知れませんね。
getString――テキストとして値を取り出す。
getInt――整数として値を取り出す。
getObject――オブジェクトとして値を取り出す。
5. 各種リソースの開放
ここでは、全レコードの取得を行いましたが、これは"select * from persondata"というようにクエリーを用意したからで、この文を書き換えることで特定の条件を設定した検索なども行えます。このあたりは、SQLの基本ですから説明するまでもありませんね。
下のリスト欄は、mydbテーブルの内容を最大100個まで取得し、その値をログに出力するサンプルです。ここでは変数dbにデータベースの指定を用意してありますので、これの値を随時書き換えて使ってください。では、データベースアクセスの流れを追っていきましょう。
1. JdbcConnectionの取得
var conn = Jdbc.getCloudSqlConnection(db);これは既に説明しました。Cloud SQLの場合は、getCloudSqlConnectionでデータベースの指定を引数にして呼び出すのでしたね。
2. JdbcStatementの作成
var stmt = conn.createStatement();createStatementでJdbcStatementオブジェクトを作成します。その後の「setMaxRows」は、文字通り、取得するレコードの最大数を指定するものです。SQLのlimitを自動追加するもの、と考えると良いでしょう。
stmt.setMaxRows(100);
3. クエリーを実行する
var rs = stmt.executeQuery("select * from persondata");JdbcのexecuteQueryは、引数に指定したクエリーを実行し、その結果をJdbcResultSetとして返すものです。これで検索した結果がオブジェクトとして返されます。後は、そこから順にレコードの値を取り出していくだけです。
4. nextによるレコードの繰り返し処理
while(rs.next()) {これが、レコードを出力している部分です。whileで繰り返しを用意していますが、その条件部分で「next」というものを呼び出していますね。これがポイントです。
var id = rs.getString("id");
var name = rs.getString("name");
var mail = rs.getString("mail");
var res = "id=" + id + ", name=" + name + ", mail=" + mail;
Logger.log(res);
}
JdbcResultSetオブジェクトは、内部に多数のレコード情報を持っています。そして「現在位置」の情報も併せ持っており、これにより「現在位置のレコード」の値を取り出すことができるようになっているのです。
作成されたばかりのとき、現在位置は一番最初のゼロ位置(ゼロ番目)にあります。nextが呼び出されると、最初のレコードの位置(1番目)に現在位置が移動します。これで、値を取り出すメソッドを呼び出すと、1つ目のレコードの値を取り出すことができます。そしてまたnextを呼び出すと2番目、更にnextすると3番目……。
こんな具合に、順にレコードの位置を移動しては、そのレコードの値を取り出す、ということを行なっていくわけです。最後にもうレコードが残ってないと、nextはfalseを返すため、whileから抜けることができます。
レコードの値は、「getString」というメソッドで取り出しています。これは引数に項目名を指定して呼び出します。あるいは番号を指定し、「○○番目のテキスト値」というようにして値を取り出すこともできます。値を取り出すためのメソッドには、以下のようなものがあります。例えば、この例ではIDの取得はgetIntのほうがよいかも知れませんね。
getString――テキストとして値を取り出す。
getInt――整数として値を取り出す。
getObject――オブジェクトとして値を取り出す。
5. 各種リソースの開放
rs.close();ひと通り作業が終わったら、最後にリソースを開放します。まずJdbcResultSetをcloseし、以下、JdbcStatement、JdbcConnectionと順にcloseしていきます。「後に作ったものから閉じていく」と考えればよいでしょう。
stmt.close();
conn.close();
ここでは、全レコードの取得を行いましたが、これは"select * from persondata"というようにクエリーを用意したからで、この文を書き換えることで特定の条件を設定した検索なども行えます。このあたりは、SQLの基本ですから説明するまでもありませんね。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
var db = "jdbc:google:rdbms://<インスタンス>/mydb"; function getList() { var conn = Jdbc.getCloudSqlConnection(db); var stmt = conn.createStatement(); stmt.setMaxRows(100); var rs = stmt.executeQuery("select * from persondata"); while(rs.next()) { var id = rs.getString("id"); var name = rs.getString("name"); var mail = rs.getString("mail"); var res = "id=" + id + ", name=" + name + ", mail=" + mail; Logger.log(res); } rs.close(); stmt.close(); conn.close(); }
※関連コンテンツ
「Google Apps Scriptプログラミング [中級編]」に戻る