連載
Servlet/JSP+MySQLでアプリケーションサーバ その2:快速MySQLでデータベースアプリ!(9)(3/3 ページ)
JavaでMySQLを操作する方法が分かったところで、今度はServletに挑戦しよう。前回の内容を理解していれば、Servletのコーディングは簡単だ。
Appendix
本文で使用したリストです。また、リスト下部のリンクをクリックすることで行番号なしのテキストファイルをダウンロードできます。ファイルはシフトJISになっていますので、漢字コードを適宜変更してご利用ください。
1 import java.io.*;
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 public class Sample extends HttpServlet
5 {
6 public void doGet (HttpServletRequest request,HttpServletResponse response)
7 throws ServletException, IOException
8 {
9 PrintWriter out;
10 response.setContentType("text/html");
11 out = response.getWriter();
12 out.println("<HTML>");
13 out.println("<BODY bgcolor=\"#FFFFFF\">");
14 out.println("<H1>HTML</H1>");
15 out.println("</BODY></HTML>");
16 out.close();
17 }
18 }
リスト5 Sample.java
1 import java.io.*;
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.net.*;
5 import java.sql.*;
6
7 public class ServletExample1 extends HttpServlet{
8 public void doGet (HttpServletRequest request,HttpServletResponse response)
9 throws ServletException, IOException{
10
11 String server = "localhost"; //MySQLサーバ
12 String db = "ATMARKIT"; //
13 String user = "test"; //ユーザー名
14 String pass = "test2001"; //パスワード
15 String url = "jdbc:mysql://" + server + "/" + db + "?useUnicode=true&characterEncoding=EUC_JP";
16 Connection con = null;
17
18 //HTML表示のため
19 PrintWriter out;
20 response.setContentType("text/html; charset=EUC_JP");
21 out = response.getWriter();
22 out.println("<HTML><HEAD><TITLE>servletからの接続1</TITLE></HEAD><BODY>");
23
24 try{
25 //ドライバのロード
26 Class.forName("org.gjt.mm.mysql.Driver");
27
28 //MySQLサーバへの接続
29 con = DriverManager.getConnection(url,user,pass);
30
31 //Statementオブジェクトの生成
32 Statement stmt = con.createStatement();
33 //漢字を含んだSQL文
34 String sql_str = "INSERT INTO list (name,memo) VALUES ('4番目','サーブレットからのテスト')";
35 stmt.executeUpdate(sql_str);
36 out.println("漢字を含んだレコードの挿入成功です!");
37
38 //切断
39 con.close();
40 stmt.close();
41 out.close();
42 }catch(SQLException e) {
43 out.println("接続失敗です〜<br>\n理由:" + e.toString());
44 }catch(Exception e){
45 e.printStackTrace();
46 }finally{
47 try{
48 //切断
49 con.close();
50 }catch(Exception e){}
51 }
52 }
53
54 }
リスト6 ServletExample1.java
1 import java.io.*;
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.net.*;
5 import java.sql.*;
6
7 public class ServletExample2 extends HttpServlet{
8 public void doPost (HttpServletRequest request,HttpServletResponse response)
9 throws ServletException, IOException{
10
11 String server = "localhost"; //MySQLサーバ
12 String db = "ATMARKIT"; //
13 String user = "test"; //ユーザー名
14 String pass = "test2001"; //パスワード
15 String url = "jdbc:mysql://" + server + "/" + db + "?useUnicode=true&characterEncoding=EUC_JP";
16 Connection con = null;
17
18 //HTML表示のため
19 PrintWriter out;
20 response.setContentType("text/html; charset=EUC_JP");
21 out = response.getWriter();
22 out.println("<HTML><HEAD><TITLE>servletからの接続2</TITLE></HEAD><BODY>");
23 //フォームの値を取得 JIS, コードの自動検出を使用
24 String name = new String(request.getParameter("name").getBytes("8859_1"),"JISAutoDetect");
25 String memo = new String(request.getParameter("memo").getBytes("8859_1"),"JISAutoDetect");
26 //入力条件が満たされている場合
27 if( !name.equals("") && !memo.equals("")){
28 try{
29 //ドライバのロード
30 Class.forName("org.gjt.mm.mysql.Driver");
31
32 //MySQLサーバへの接続
33 con = DriverManager.getConnection(url,user,pass);
34
35 //Statementオブジェクトの生成
36 Statement stmt = con.createStatement();
37
38 //漢字を含んだSQL文
39 String sql_str = "INSERT INTO list (name,memo) VALUES ('"+name+"','"+memo+"')";
40 stmt.executeUpdate(sql_str);
41 out.println("フォームからのレコードの挿入成功です!<br>");
42
43 //切断
44 con.close();
45 stmt.close();
46 out.close();
47 }catch(SQLException e) {
48 out.println("接続失敗です〜<br>\n理由:" + e.toString());
49 }catch(Exception e){
50 e.printStackTrace();
51 }finally{
52 try{
53 //切断
54 con.close();
55 }catch(Exception e){}
56 }
57 }else{
58 out.println("<br>入力項目が足りません<br>");
59 out.close();
60 }
61 }
62 }
リスト7 ServletExample2.java
1 import java.io.*;
2 import javax.servlet.*;
3 import javax.servlet.http.*;
4 import java.net.*;
5 import java.sql.*;
6
7 public class ServletExample3 extends HttpServlet{
8 public void doPost (HttpServletRequest request,HttpServletResponse response)
9 throws ServletException, IOException{
10
11 String server = "localhost"; //MySQLサーバ
12 String db = "ATMARKIT"; //
13 String user = "test"; //ユーザー名
14 String pass = "test2001"; //パスワード
15 String url = "jdbc:mysql://" + server + "/" + db + "?useUnicode=true&characterEncoding=EUC_JP";
16 Connection con = null;
17 String where_query = "";
18 //HTML表示のため
19 PrintWriter out;
20 response.setContentType("text/html; charset=EUC_JP");
21 out = response.getWriter();
22 out.println("<HTML><HEAD><TITLE>servletからの接続3</TITLE></HEAD><BODY>");
23 //フォームの値を取得 JIS, コードの自動検出を使用
24 String name = new String(request.getParameter("name").getBytes("8859_1"),"JISAutoDetect");
25 String memo = new String(request.getParameter("memo").getBytes("8859_1"),"JISAutoDetect");
26 //SQLクエリーのwhere節を作成
27 if( !name.equals("") )
28 where_query = where_query + " and name like '%"+name+"%'";
29 if( !memo.equals("") )
30 where_query = where_query + " and memo like '%"+memo+"%'";
31
32 //入力条件が満たされている場合
33 if(!where_query.equals("") && where_query.startsWith(" and")){
34
35 //頭の" and"を削除
36 where_query = " WHERE"+where_query.substring(4,where_query.length());
37
38 try{
39 //ドライバのロード
40 Class.forName("org.gjt.mm.mysql.Driver");
41
42 //MySQLサーバへの接続
43 con = DriverManager.getConnection(url,user,pass);
44
45 //Statementオブジェクトの生成
46 Statement stmt = con.createStatement();
47
48 //SQL文
49 String sql_str = "SELECT * FROM list" + where_query;
50
51 //SQL文の実行とResultSetオブジェクトの取得
52 ResultSet rs = stmt.executeQuery(sql_str);
53
54 //検索結果の抽出
55 while(rs.next()){
56 int rs_id = rs.getInt("id");
57 String rs_name = rs.getString("name");
58 String rs_memo = rs.getString("memo");
59
60 out.println("<p>----------------<br>");
61 out.println("<br>id:" + rs_id);
62 out.println("<br>name:" + rs_name);
63 out.println("<br>memo:" + rs_memo);
64 }
65
66 out.println("<br>"+sql_str+"<br>検索結果は以上です<br>");
67
68 //切断
69 rs.close();
70 con.close();
71 stmt.close();
72 out.close();
73
74 }catch(SQLException e) {
75 out.println("接続失敗です〜\n理由:" + e.toString());
76 out.close();
77 }catch(Exception e){
78 e.printStackTrace();
79 }finally{
80 try{
81 //切断
82 con.close();
83 }catch(Exception e){}
84 }
85 }else{
86 out.println("<br>検索項目が足りません<br>");
87 out.close();
88 }
89 }
90 }
リスト8 ServletExample3.java
Copyright © ITmedia, Inc. All Rights Reserved.