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()){
int id = rs.getInt("id");
String name = rs.getString("name");
String mail = rs.getString("mail");
……以下略……ResultSetでは、「next」を呼び出すことで次々にレコードのデータをとり出すことができます。whileでnextがfalseになるまで繰り返しを実行しています。値の取り出しは、ResultSetの「getInt」や「getString」で行なっています。――ざっと見ればわかるように、実は通常の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)プログラミング入門」に戻る