libro
www.tuyano.com
Google App Engine for Java(GAE/J)プログラミング入門

Google Cloud SQLを利用する (5/6)

作成:2012-05-20 10:35
更新:2012-05-20 10:35

■JSPからCloud SQLにアクセスする

では、作成したテーブルに、GAEからアクセスをしてみましょう。ここではシンプルに、JSPからレコードを取り出して表示させてみます。

下のリスト欄にサンプルコードを掲載しておきました。これを「helo.jsp」というファイル名でファイルを作成し、GAEにデプロイしてから、
http://アプリ名/helo.jsp
というようにアクセスしてみてください。先ほど作成したpersondataのレコードが一覧表示されます。――では、リストを見ながら、ポイントを整理しておきましょう。


●ドライバクラスのimport
<%@ page import="java.sql.*" %>
<%@ page import="com.google.appengine.api.rdbms.AppEngineDriver" %>
まずは必要なクラスのimportからです。SQL関連の機能はjava.sqlのクラスをそのまま使います。重要なのはドライバのクラスです。これは、Cloud SQL専用のものが、com.google.appengine.api.rdbms.AppEngineDriverに用意されています。これを使ってデータベースにアクセスします。一般に配布されているMySQLのドライバは使えないので注意してください。


●Connectionインスタンスの作成
Connection c = null;
c = DriverManager.getConnection
    ("jdbc:google:rdbms://tuyano-gae-sample-sql:sampledata/mydb");
続いて、データベースアクセスの部分を見ていきましょう。データベースアクセスは、まずConnectionクラスのインスタスを用意することから始まります。これは、DriverManagerクラスの「getConnection」メソッドを呼び出して行えます。これは引数に接続先のデータベースのURLを指定しますが、これでは以下のように指定をします。
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()){
    int id = rs.getInt("id");
    String name = rs.getString("name");
    String mail = rs.getString("mail");
    ……以下略……
ResultSetでは、「next」を呼び出すことで次々にレコードのデータをとり出すことができます。whilenextfalseになるまで繰り返しを実行しています。値の取り出しは、ResultSetの「getInt」や「getString」で行なっています。


――ざっと見ればわかるように、実は通常のSQLデータベースアクセスと違っているのは、最初のDriverManager.getConnectionの部分だけです。以後は、普通にMySQLを利用するのと全く変わりありません。ですから、SQLデータベース・アクセスをやったとがあれば、全く同様の感覚でCloud SQLも使えることがわかるでしょう。

そもそも、ドライバクラスだけ独自のものを使って、他はすべてjava.sqlパッケージのクラスをそのまま使っているわけですから、同じなのは当たり前ですね……。

※プログラムリストが表示されない場合

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)プログラミング入門」に戻る