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メソッドの呼び出し
である。