import java.sql.Connection; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement; import java.sql.DriverManager; import java.io.PrintWriter; import java.io.IOException; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class jdbcServletSample extends HttpServlet{ //initメソッドのオーバーライド public void init(ServletConfig config)throws ServletException{ super.init(config); //ドライバのロード try{ Class.forName("org.postgresql.Driver"); }catch (ClassNotFoundException cnfe){ throw new ServletException("Failed to load JDBC driver."); } } //doGetメソッド public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ Connection con = null; Statement stmt = null; ResultSet rs = null; response.setContentType("text/html; charset=Shift_JIS"); //ブラウザにキャッシュを使わせないための工夫らしい。 response.setHeader("Expires", "Sat, 01 jan 2000 00:00:00 GMT"); try{ con = DriverManager.getConnection( "jdbc:postgresql://サーバ名/データベース名", "ユーザ名","パスワード" ); stmt = con.createStatement(); PrintWriter out = response.getWriter(); out.println("<html><head>"); out.println("<title>JDBCによるインデックス/索引システム</title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>JDBCによるインデックス/索引システム(?)</h3>"); out.println("<hr>"); out.println("<table align=center>"); //SELECT文の実行 rs = stmt.executeQuery("SELECT * FROM t99xxxxx_tbl1"); while(rs.next()){ String button0 = rs.getString("button0"); String name0 = rs.getString("name0"); String textarea0 = rs.getString("textarea0"); out.println("<tr><td><b>URL:</b></td>"); out.println("<td><b><a href=\""+ name0 +"\">" + name0 +"</a></b></td></tr>"); out.println("<tr><td>概念:</td>"); out.println("<td>" + button0 + "</td></tr>"); out.println("<tr><td>コメント:</td>"); out.println("<td>" + textarea0 + "</td></tr>"); out.println("<tr><td colspan=2><hr></td></tr>"); } out.println("</table>"); //以下、登録用フォーム out.println("<hr>"); out.println("<form action=\"./jdbcServletSample\" method=post>"); out.println("<ul>"); out.println("<li>"); out.println("<select name=select0>"); out.println("<option value=1 selected>新規登録</option>"); out.println("<option value=2>更新</option>"); out.println("</select>"); out.println("<li>登録したい概念"); out.println("<input type=radio value=Concept name=button0>概念"); out.println("<input type=radio value=method name=button0>"); out.println("メソッド"); out.println("<input type=radio value=class checked name=button0>"); out.println("クラス"); out.println("<li>対応URL"); out.println("<input name=name0>"); out.println("<li>注釈内容<br>"); out.println("<textarea name=textarea0 rows=5 cols=50></textarea>"); out.println("</ul><input type=submit value=\"堤出\">"); out.println("</form>"); out.println("</body></html>"); out.close(); rs.close(); stmt.close(); con.close(); }catch(SQLException se){ throw new ServletException("Cannot Connect Database. " + "Please contact webmaster with the below message." + "\nSQLException: " + se.getMessage() + "\nSQLState: " + se.getSQLState() + "\nVendorError: " + se.getErrorCode()); }finally{ try{ if(rs != null){ rs.close(); } if(stmt != null){ stmt.close(); } if(con != null){ con.close(); } }catch(SQLException se){ se.printStackTrace(); } } } //doPostメソッド public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ Connection con = null; Statement stmt = null; response.setContentType("text/html; charset=Shift_JIS"); try{ con = DriverManager.getConnection( "jdbc:postgresql://サーバ名/データベース名", "ユーザ名","パスワード" ); stmt = con.createStatement(); //フォームからのパラメータ取得 String form_select0 = request.getParameter("select0"); String form_button0 = request.getParameter("button0"); String form_name0 = request.getParameter("name0"); //日本語文字コード対策 String form_textarea0 = new String( request.getParameter("textarea0").getBytes("8859_1"),"SJIS" ); //フォームのselect0が1の時は新規登録を行う。INSERT文の実行。 if(form_select0.equals("1")){ int count = stmt.executeUpdate("INSERT INTO t99xxxxx_tbl1" +" VALUES(" +"'" + form_button0 + "'," +" '" + form_name0 + "'," +" '" + form_textarea0 + "')"); } //フォームのselect0が2の時はレコードの更新。UPDATE文の実行。 else if(form_select0.equals("2")){ int count = stmt.executeUpdate("UPDATE t99xxxxx_tbl1 SET" +" textarea0 = '" + form_textarea0 + "'" +" WHERE name0 = '" + form_name0 + "'" +" AND button0 = '" + form_button0 + "'"); } stmt.close(); con.close(); }catch(SQLException se){ throw new ServletException("Cannot Connect Database. " + "Please contact webmaster with the below message." + "\nSQLException: " + se.getMessage() + "\nSQLState: " + se.getSQLState() + "\nVendorError: " + se.getErrorCode()); }finally{ try{ if(stmt != null){ stmt.close(); } if(con != null){ con.close(); } }catch(SQLException se){ se.printStackTrace(); } } doGet(request,response); } } |
データベースとの接続 → SELECT文によるデータの取り出し&表示 → 投稿フォームの表示→データベースから切断
だけである。
データベースとの接続 → フォームで送信されたパラメータの取得
→ フォームから取ってきたselect0(新規登録か更新かの選択)の値に応じたSQL文の実行 → データベースからの切断
→ doGetメソッドの呼び出し
である。