2014年01月29日
Webアプリケーションを作りましょう! その6 データベースとの連携
さて、データベースの環境も整いまして、
データベースのデータを引っ張り出してウェブページに表示したいと思います。
JSPを用意して、DBに接続するコードを書いて、そのあとに情報を引っ張り出す。
という風に一つに処理を書いてもいいのですが、
また新たなJSPを作るときに、また接続のためのコードを頭から書かなければいけません。
逆に、DBに接続するクラスを一つ用意して、
データベースに接続して情報を表示するだけのJSPを用意するようにすれば、
今後JSPをいくつ量産しても、そのDB接続用のクラスを使いまわせばいいので、
コードに無駄がありません。
それでは、最初に、DBに接続するためのクラスを用意します。
1.DBに接続するクラスを用意
Eclipse→新規→クラス→「ConnctorManager」(名前は適当)
package testWeb;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectorManager {
final static String DRIVER = "com.mysql.jdbc.Driver";
final static String URL ="jdbc:mysql://localhost/webapp";
final static String USER ="root";
final static String PASS ="pass";
public static Connection getConnection() throws SQLException{
try{
Class. forName(DRIVER);
} catch (ClassNotFoundException e){
e.printStackTrace();
throw new IllegalStateException("クラスのロードに失敗しました: "+e.getMessage());
}
Connection con = DriverManager. getConnection(URL,USER, PASS);
return con;
}
}
はい、残念なことにいろいろと解説しなければならないですね。
まず、import文で、下記3つを用意しています。
データベースに、url,user,passwordを持たせて接続するために必要とだけ思ってもらえれば。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
そして、try-catch これは例外処理で、tryで囲った部分を試して、
catchで指定したエラーが返ってきたら、catchで囲った内容を実施してね。
といったものです。あらかじめ発生する可能性のある例外処理を記載しておくのです。
なので、難しそうではありますが、ConnctorManagerのgetConnectionが呼ばれたら、
例外でなければ、DriverManager. getConnection( URL, USER, PASS );の値を呼び出したプログラムに
渡してね。といった内容。
つまり、DBの場所と、ユーザー名とパスワードを定義しているだけなんですね。
2.JSPからDBの内容を表示する
JSPを作成します。
accountinfo.jsp
<%@page contentType="text/plain; charset=UTF-8" %>
<%@page import= "testWeb.ConnectorManager,java.sql.*" %>>
<%
try{
Connection con = ConnectorManager.getConnection();
Statement smt = con.createStatement();
ResultSet rs = smt.executeQuery("select * from testaccount");
while(rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:"+rs.getString("USERNAME" )+",PASS:" +rs.getString("USERPASS"));
}
smt.close();
con.close();
}catch (SQLException e){
e.printStackTrace();
}
%>
JSPでもAPIのインポートは実施できます。
<%@ page import= "testWeb.ConnectorManager,java.sql.*" %>>行で、
ConnectorManagerクラスと、java.sql.*をインポートしました。
Statement … データベースにSQL文を送信するためのStatementオブジェクトを生成。
ResultSet … 指定されたSQLを実行
この2つの中身がどうやって動いているかまでは理解しなくても、
Connectionで接続して、Statementでオブジェクトを生成して、ResultsetでSQL文を実行。
といった順番で処理を行っているのはわかります。
そして、
while (rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:" +rs.getString("USERNAME" )+",PASS:" +rs.getString( "USERPASS"));
にて、テーブルの行一つ一つを最終行まで、ループさせて、そのつどテーブルの中身をプリントしています。
そして、 http://localhost/testWeb/accountinfo.jsp を実行すると、
このように、select * from testaccount が実行され、
その中身の1行1行がプリントされました。
このようにjsp(サーブレット)ではテーブルの中身を表示させることができます。
お分かりかと思いますが、
ResultSet rs = smt.executeQuery( "select * from testaccount");
この行のSQL文でINSERT INTOのような追加分を発行すれば、DBのデータを上書きすることができます。
こういったやり取りで、入力出力をDBとの連携させて行うことができ、
その結果をWEBに表示することで動的なページを生成しているわけです。
あとは、この応用で動的なページはどうにでも作れるかと思います。
いったん、Webアプリケーションを作ってみよう!は、休憩しましょうか。
1記事1記事にすごい時間がかかるww
データベースのデータを引っ張り出してウェブページに表示したいと思います。
JSPを用意して、DBに接続するコードを書いて、そのあとに情報を引っ張り出す。
という風に一つに処理を書いてもいいのですが、
また新たなJSPを作るときに、また接続のためのコードを頭から書かなければいけません。
逆に、DBに接続するクラスを一つ用意して、
データベースに接続して情報を表示するだけのJSPを用意するようにすれば、
今後JSPをいくつ量産しても、そのDB接続用のクラスを使いまわせばいいので、
コードに無駄がありません。
それでは、最初に、DBに接続するためのクラスを用意します。
1.DBに接続するクラスを用意
Eclipse→新規→クラス→「ConnctorManager」(名前は適当)
package testWeb;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectorManager {
final static String DRIVER = "com.mysql.jdbc.Driver";
final static String URL ="jdbc:mysql://localhost/webapp";
final static String USER ="root";
final static String PASS ="pass";
public static Connection getConnection() throws SQLException{
try{
Class. forName(DRIVER);
} catch (ClassNotFoundException e){
e.printStackTrace();
throw new IllegalStateException("クラスのロードに失敗しました: "+e.getMessage());
}
Connection con = DriverManager. getConnection(URL,USER, PASS);
return con;
}
}
はい、残念なことにいろいろと解説しなければならないですね。
まず、import文で、下記3つを用意しています。
データベースに、url,user,passwordを持たせて接続するために必要とだけ思ってもらえれば。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
そして、try-catch これは例外処理で、tryで囲った部分を試して、
catchで指定したエラーが返ってきたら、catchで囲った内容を実施してね。
といったものです。あらかじめ発生する可能性のある例外処理を記載しておくのです。
なので、難しそうではありますが、ConnctorManagerのgetConnectionが呼ばれたら、
例外でなければ、DriverManager. getConnection( URL, USER, PASS );の値を呼び出したプログラムに
渡してね。といった内容。
つまり、DBの場所と、ユーザー名とパスワードを定義しているだけなんですね。
2.JSPからDBの内容を表示する
JSPを作成します。
accountinfo.jsp
<%@page contentType="text/plain; charset=UTF-8" %>
<%@page import= "testWeb.ConnectorManager,java.sql.*" %>>
<%
try{
Connection con = ConnectorManager.getConnection();
Statement smt = con.createStatement();
ResultSet rs = smt.executeQuery("select * from testaccount");
while(rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:"+rs.getString("USERNAME" )+",PASS:" +rs.getString("USERPASS"));
}
smt.close();
con.close();
}catch (SQLException e){
e.printStackTrace();
}
%>
JSPでもAPIのインポートは実施できます。
<%@ page import= "testWeb.ConnectorManager,java.sql.*" %>>行で、
ConnectorManagerクラスと、java.sql.*をインポートしました。
Statement … データベースにSQL文を送信するためのStatementオブジェクトを生成。
ResultSet … 指定されたSQLを実行
この2つの中身がどうやって動いているかまでは理解しなくても、
Connectionで接続して、Statementでオブジェクトを生成して、ResultsetでSQL文を実行。
といった順番で処理を行っているのはわかります。
そして、
while (rs.next()){
out.println( "ID:" +rs.getString("USERID" ) +",NAME:" +rs.getString("USERNAME" )+",PASS:" +rs.getString( "USERPASS"));
にて、テーブルの行一つ一つを最終行まで、ループさせて、そのつどテーブルの中身をプリントしています。
そして、 http://localhost/testWeb/accountinfo.jsp を実行すると、
このように、select * from testaccount が実行され、
その中身の1行1行がプリントされました。
このようにjsp(サーブレット)ではテーブルの中身を表示させることができます。
お分かりかと思いますが、
ResultSet rs = smt.executeQuery( "select * from testaccount");
この行のSQL文でINSERT INTOのような追加分を発行すれば、DBのデータを上書きすることができます。
こういったやり取りで、入力出力をDBとの連携させて行うことができ、
その結果をWEBに表示することで動的なページを生成しているわけです。
あとは、この応用で動的なページはどうにでも作れるかと思います。
いったん、Webアプリケーションを作ってみよう!は、休憩しましょうか。
1記事1記事にすごい時間がかかるww