| 3.JDBC API ( Servlet ) |
| (1) JDBC API ( Servlet ) |
// HelloWorldServletMysqlJDBC.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; public class HelloWorldServletMysqlJDBC extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType ("text/html;charset=Shift_JIS"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("Hello World Mysql<br><br>"); try { Class.forName("org.gjt.mm.mysql.Driver"); Connection con = DriverManager.getConnection ("jdbc:mysql:///hellodb"); // ("jdbc:mysql://127.0.0.1/hellodb") でも可 Statement stmt = con.createStatement(); String sql = "SELECT * FROM hello_world_table"; ResultSet rs = stmt.executeQuery(sql); out.println("<table border=1>"); while(rs.next()){ int no = rs.getInt("NO"); String lang = rs.getString("LANGUAGE"); String msg = rs.getString("MESSAGE"); out.println("<tr>"); out.printin("<td>" + no + "</td>"); out.println("<td>" + lang + "</td>"); out.println("<td>" + msg + "</td>"); out.println("</tr>"); } out.println("</table>"); stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } out.println("</body>"); out.println("</html>"); } } |
servlet 必須
servlet.http 必須
java.sql 必須
servlet 派生クラス
service メソッドは
必ず呼ばれる
Html 文を出力
*1 ドライバクラスのロード
*2 データベースに接続
*3 SQL ステートメント
オブジェクトの生成
*4 SQL 文の実行と結果取得
Html 文出力
*5 検索された行数分ループ
int 型の項目 NOを取得
文字型の項目 言語と
メッセージを取得
標準出力(表示)
Html のtable と
入力データを組合わせて
出力
*6 クローズ
SQL stmt をクローズ
データベースから切断
*7 Exception エラー
標準エラーストリーム
に出力
Html 文出力
|
||||||
|
実行結果 ブラウザで実行 : http://127.0.0.1/examples/servlet/HelloWorldServletMysqlJDBC Hello World Mysql
| |||||||
|
※MySQL テーブル 定義の内容 ==> hello_world_table |
|||||||
| (2) Java Aplication とJava servlet での環境の違い |
任意のフォルダで java Aplication としてソースを作成し、コンパイル後そのまま 実行できます。 ・コンパイルは、javac.exe で、実行は java.exe です。 path 定義で、javac.exe , java.exe はどのフォルダでも実行できます。 Path=C:\jdk1.3.1_06\bin;c:\mysql\bin;.... ・実行時に、指定したDBCドライバ クラスを参照します。 classpath 定義により、 C:\java_test> set classpath=%classpath%;C:\...\mysql-connector-java-2.0.14 とすると、mysql-connector-java-2.0.14 直下に「org.gjt.mm.mysql.Driver」が 存在するので正しく動作します。 ※JDBC ドライバ クラスにパスが通っていないと実行時に次のエラーになります。 「java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver」 ※java.exe の classpath パスオプションで指定しても構いません。
任意のフォルダで java Servlet としてソースを作成し、コンパイル後に ブラウザ側で起動します。 サーブレットはサーバー側で実行されますので、Java Aplication が検索する classpath とはなにも関係ありません。 ・コンパイルは、javac.exe で、実行は ブラウザで行います。 ・path 定義で、javac.exe はどのフォルダでも実行できます。 ・作成したサーブレットのクラスは、サーブレット実行可能フォルダーに移動する 必要があります。 ( ...\WEB-INF\classes\HelloWorldServletMySQLJDBC.class ) ・JDBC ドライバ クラスを含む、jar ファイルをサーブレット実行可能フォルダー に移動する必要があります。 ( ...\WEB-INF\lib\mysql-connector-java-2.0.14-bin.jar ) このjar ファイルがないと、エラーログファイルに次のメッセージが出力されま す。 「java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver」
Windows の環境設定は、コントロールパネル、システム、詳細、環境変数で設定し再起動するか、上記のように一時的に コマンドプロンプトの set コマンド( path=... , classpath=...)でも設定できます。
実行可能フォルダーは、次のフォルダ構造を参照してください。詳細は Servlet 編で説明済みですので省略します。尚、JDBC ドライバ クラスを含む、jar ファイルは、%JAVAHOME%jre\ext\mysql-connector-java-2.0.14-bin.jar としても探してくれますが、好ましくないとされています。
(2)-3 JDBC 環境のフォルダ 構造
今までの説明をフォルダ 構造で整理してみました。尚、JDBC は MySQL を例にしています。
webapps (ルート) ・・・ "C:\Program Files\Apache Group\Tomcat 4.1\webapps\" │ ├─ examples │ ├─ jsp ─── HelloWorldJspMySQLJDBC.jsp │ ├─ servlet ─┬─ HelloWorldServletMySQLJDBC.java │ │ ├─ │ │ └─ │ │ │ └─ WEB-INF ─┬─ web.xml │ ├─ classes ─ HelloWorldServletMySQLJDBC.class │ ├─ lib ─ mysql-connector-java-2.0.14-bin.jar (MySQL JDBCのインストール先からコピー) java_test ・・・ "C:\java_test\" │ ├─ HelloWorldMySQLJDBC.java ├─ HelloWorldMySQLJDBC.class tool ・・・ "C:\toolt\" (MySQL JDBCのインストール) │ ├─ mysql ─┬─ META-INF ─── MANIFEST.MF │ ├─ mysql-connector-java-2.0.14.zip (ダウンロード) │ └─ mysql-connector-java-2.0.14 │ ├─ mysql-connector-java-2.0.14-bin.jar │ ├─ com ─ │ ├─ lib ─ │ └─ org ─git─mm─mysql─┬─ Driver.class │ ├─ Driver.java mysql ・・・ "C:\mysql\" (MySQL のインストール) │ ├─ bin ─── mysql.exe ├─ data ─┬─ hellodb ─┬─ hello_world_table.frm │ │ ├─ hello_world_table.MYD │ │ └─ hello_world_table.MYI │ ├─ mysql ─┬─ db.frm