4.JDBC API ( JSP )

Java からデータベースにアクセスする JDBC API を JSP 版で説明します。

(1) JDBC API ( JSP )


 前章では、JDBCを使用してデータベースをアクセスする Servlet について説明しました。 Servlet/JDBC が実行できれば、JSP/JDBC も問題ありません。次の例は、データベース(MySQL)を参照し、結果を表示する Java JSP のスタイルです。

<!-- HelloWorldJspMySQLJDBC.jsp -->
<html>
<head>
<title>Hello World JSP/JDBC</title>
</head>
<body>
<%@ page contentType="text/html; charset=Shift_JIS" %>
<%@ page import="java.sql.*"%> 

<%
  System.out.println("JSP start");
  String s= "Hello World<br><br>";
  out.println(s);

    try {
      Class.forName("org.gjt.mm.mysql.Driver");

      Connection con = 
           DriverManager.getConnection
                   ("jdbc:mysql:///hellodb");

      Statement stmt = con.createStatement();
      String sql = "SELECT * FROM hello_world_table";
      ResultSet rs = stmt.executeQuery(sql);

      while(rs.next()){
        int no = rs.getInt("NO");
        String lang = rs.getString("LANGUAGE");
        String msg = rs.getString("MESSAGE");
        out.println(no + " " + 
                          lang + " " + msg + "<br>");
      }

      stmt.close();
      con.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
%>

</body>
</html>







java.sql 必須


stdout.log に出力

Hello World 出力


*1 ドライバクラスのロード

*2 データベースに接続



*3 SQL ステートメント
  オブジェクトの生成
*4 SQL 文の実行と結果取得

*5 検索された行数分ループ
  int 型の項目 NOを取得
  文字型の項目 言語と
      メッセージを取得
  標準出力(表示)



*6 クローズ
  SQL stmt をクローズ
  データベースから切断
*7 Exception エラー
 標準エラーストリーム
 に出力



実行結果
ブラウザで実行 : http://127.0.0.1/examples/jsp/HelloWorldJspMySQLJDBC.jsp

Hello World

1 日本語 こんにちわ 世界
2 英語 Hello World

 ※MySQL テーブル 定義の内容 ==> hello_world_table


 上記プログラムの朱記部分の % は JSP タグの宣言です。スクリプトレットとしてJavaで記述しています。すでに「JSP スクリプト」で説明済みです。尚、MySQL はフリーのリレーショナルデータベースです。そのインストールやDBの作成等の詳細は、ホームの「DB」を参照してください。また、MySQL JDBC ドライバも入手しないと、実行できません。

   MySQL ダウンロード    MySQL JDBC ダウンロード


  *1 〜 *7 は前章の説明と同じですので、ここでは省略します。


(2) JSP による DB 検索と表示


 jspInit()メソッドはJSPページが初期化されるときに呼び出されるので、これを利用してDBの接続をします。jspDestroy()メソッドはJSPページが破棄される時に呼び出されるので、これを利用してDBをクローズします。

 以下の例は画面からNOを入力し、その言語とあいさつ内容をデータベースから入力し表示する JSP の例です。

<!-- HelloWorldJspMySQLJDBC2.jsp -->
<html>
<head>
<title>JSP/JDBC/MYSQL/FORM</title>

<%@ page contentType="text/html; charset=Shift_JIS" %> <%@ page import="java.io.*, java.util.*, java.sql.*" %> <%! Connection con = null; public void ;jspInit() { System.out.println("Hello...JDBC2.jsp:jspInit\n"); String dsn = "hellodb"; String url = "jdbc:mysql:///" + dsn; String userId = ""; String password = ""; try { Class.forName ("org.gjt.mm.mysql.Driver"); con = DriverManager.getConnection(url, userId, password); } catch (ClassNotFoundException e) { System.out.println ("HelloWorldJspMySQLJDBC2.jsp:Driver class not found\n"); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } public void ;jspDestroy() { System.out.println("HelloWorldJspMySQLJDBC2.jsp:Destroy\n"); try { con.close(); } catch (Exception e) { e.printStackTrace(); } } %>
</head> <body> <% response.setContentType( "text/html; charset=Shift_JIS"); String seqName = ""; Enumeration params = request.getParameterNames(); while ( params.hasMoreElements()) { String name = (String)params.nextElement(); String value = request.getParameter( name); if ( name.equals( "seq")) { seqName = value; } } %> <h2>NO 入力</h2> <form action="HelloWorldJspMySQLJDBC2.jsp" method="POST"> <% if ( seqName.equals( "")) { %> <input name="seq" size=4 type="text"> <% } else { %> <input name="seq" size=4 type="text" value= <%= request.getParameter("seq") %>> <% } %>    <input type="submit" value="send"> </form> <% if ( seqName.equals( "")) { %> <br><br> <% } else { Statement select = con.createStatement(); String sql = "SELECT * FROM hello_world_table WHERE hello_world_table.NO='" + seqName + "'"; ResultSet resultSet = select.executeQuery(sql); %> <table border=1 width=30%> <tr> <th>No</th> <th>言語</th> <th>あいさつ</th> </tr> <% int count = 0; while (resultSet.next()) { count++; %> <tr> <td><%= resultSet.getString("NO") %></td> <td><%= resultSet.getString("LANGUAGE") %></td> <td><%= resultSet.getString("MESSAGE") %></td> </tr> <% } %> </table> <% select.close(); if(count==0){ String NA = "Data Not Found"; %> <br><br>  <%= NA %> <% } } %> </body> </html>
コメント




con (最初1回だけ) ドライバロード DB 接続 (停止時1回だけ) DB 切断
ここから 毎回の処理 FORM 入力 自身のJSP起動 未入力のとき 入力時の値を 再表示の為 セット 漢字ブランク 送信ボタン 未入力のとき 改行改行 入力のとき SQL 文 object 生成 検索 NO=入力値 SQL 実行 表見出し 入力件数=0 複数行処理 入力件数+1 NOの値 LANGUAGEの値 MESSAGEの値 入力件数が0? データなしを を表示 Html end
実行結果
ブラウザで実行 : http://127.0.0.1/examples/jsp/HelloWorldJspMySQLJDBC2.jsp

NO 入力

  





==>

NO 入力

  

No 言語 あいさつ
2 英語 Hello World
==>

NO 入力

  

No 言語 あいさつ

  Data Not Found

 ※MySQL テーブル 定義の内容 ==> hello_world_table



前の章(3.JDBC API Servlet)    次の章(5.JDBC API Applet )