Google Cloud SQLを利用する (5/6)
作成:2012-05-20 10:35
更新:2012-05-20 10:35
更新:2012-05-20 10:35
■JSPからCloud SQLにアクセスする
では、作成したテーブルに、GAEからアクセスをしてみましょう。ここではシンプルに、JSPからレコードを取り出して表示させてみます。
下のリスト欄にサンプルコードを掲載しておきました。これを「helo.jsp」というファイル名でファイルを作成し、GAEにデプロイしてから、
●ドライバクラスのimport
●Connectionインスタンスの作成
●Statement作成
●executeQueryを実行しResultSetを取得
●ResultSetのデータを処理する
――ざっと見ればわかるように、実は通常のSQLデータベースアクセスと違っているのは、最初のDriverManager.getConnectionの部分だけです。以後は、普通にMySQLを利用するのと全く変わりありません。ですから、SQLデータベース・アクセスをやったとがあれば、全く同様の感覚でCloud SQLも使えることがわかるでしょう。
そもそも、ドライバクラスだけ独自のものを使って、他はすべてjava.sqlパッケージのクラスをそのまま使っているわけですから、同じなのは当たり前ですね……。
下のリスト欄にサンプルコードを掲載しておきました。これを「helo.jsp」というファイル名でファイルを作成し、GAEにデプロイしてから、
http://アプリ名/helo.jspというようにアクセスしてみてください。先ほど作成したpersondataのレコードが一覧表示されます。――では、リストを見ながら、ポイントを整理しておきましょう。
●ドライバクラスのimport
<%@ page import="java.sql.*" %>まずは必要なクラスのimportからです。SQL関連の機能はjava.sqlのクラスをそのまま使います。重要なのはドライバのクラスです。これは、Cloud SQL専用のものが、com.google.appengine.api.rdbms.AppEngineDriverに用意されています。これを使ってデータベースにアクセスします。一般に配布されているMySQLのドライバは使えないので注意してください。
<%@ page import="com.google.appengine.api.rdbms.AppEngineDriver" %>
●Connectionインスタンスの作成
Connection c = null;続いて、データベースアクセスの部分を見ていきましょう。データベースアクセスは、まずConnectionクラスのインスタスを用意することから始まります。これは、DriverManagerクラスの「getConnection」メソッドを呼び出して行えます。これは引数に接続先のデータベースのURLを指定しますが、これでは以下のように指定をします。
c = DriverManager.getConnection
("jdbc:google:rdbms://tuyano-gae-sample-sql:sampledata/mydb");
jdbc:google:rdbms://インスタンス名:データベース名/テーブル名通常のMySQLとは明らかに異なっていることがわかります。jdbc:google:rdbms://の後に、使用するCloud SQLのインスタンス名、データベース名、テーブル名といった情報を記述します。
●Statement作成
Statement st = c.createStatement();続いて、StatementインスタンスをcreateStatementで作成します。これは通常のDBアクセスと同じですね。
●executeQueryを実行しResultSetを取得
ResultSet rs = st.executeQuery("SELECT * FROM persondata");これも通常のDBアクセスと同じです。executeQueryでクエリーを実行し、結果をResultSetとして受け取ります。後は、ResultSetからレコードを取り出し、処理していくだけですね。
●ResultSetのデータを処理する
while (rs.next()){ResultSetでは、「next」を呼び出すことで次々にレコードのデータをとり出すことができます。whileでnextがfalseになるまで繰り返しを実行しています。値の取り出しは、ResultSetの「getInt」や「getString」で行なっています。
int id = rs.getInt("id");
String name = rs.getString("name");
String mail = rs.getString("mail");
……以下略……
――ざっと見ればわかるように、実は通常のSQLデータベースアクセスと違っているのは、最初のDriverManager.getConnectionの部分だけです。以後は、普通にMySQLを利用するのと全く変わりありません。ですから、SQLデータベース・アクセスをやったとがあれば、全く同様の感覚でCloud SQLも使えることがわかるでしょう。
そもそも、ドライバクラスだけ独自のものを使って、他はすべてjava.sqlパッケージのクラスをそのまま使っているわけですから、同じなのは当たり前ですね……。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※helo.jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util.List" %> <%@ page import="java.sql.*" %> <%@ page import="com.google.appengine.api.rdbms.AppEngineDriver" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Sample jsp</title> <style> h1{ font-size: 16pt; background: #AAFFAA; padding: 5px; } table { border: 1px solid black } table tr th { background-color: #CCFFDD; margin: 5px; } </style> </head> <body> <h1>Sample jsp page</h1> <p>これはサンプルで用意したページです。</p> <% Connection c = null; c = DriverManager.getConnection ("jdbc:google:rdbms://…ここにCloud SQLインスタンス名を書く…:sampledata/mydb"); Statement st = c.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM persondata"); %> <table> <tr> <th>ID</th> <th>Name</th> <th>Mail</th> </tr> <% while (rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); String mail = rs.getString("mail"); %> <tr> <td><%= id %></td> <td><%= name %></td> <td><%= mail %></td> </tr> <% } c.close(); %> </table> </body> </html>
※関連コンテンツ
「Google App Engine for Java(GAE/J)プログラミング入門」に戻る