- Home ›
- サーブレット/JSP入門 ›
- スケジュール管理 ›
- HERE
スケジュールの登録
では作成したスケジュールをデータベースに登録してみます。
スケジュールの登録には「ScheduleInsert」サーブレットを別途用意し、「NewSchedule」内のフォームから呼び出されるようにしてみます。
「NewSchedule」サーブレットからは日付や時刻、スケジュールの内容などをパラメータとして渡されてきます。まずパラメータを取得して表示するところまでを作成してみます。「NewSchedule」サーブレットのフォームの送信先を次のように変更します。
sb.append("<form method=¥"post¥" action=¥"/schedule/ScheduleInsert¥">");
※この部分だけを変更したものを「NewSchedule3.java」として保存しました。
今回は「POST」で送信しますので、受け取る側の「ScheduleInsert」サーブレットでも「doPost()」メソッドで処理します。
次に「ScheduleInsert」サーブレットを作成します。「NewSchedule」サーブレットから送られ来るパラメータを取得し、データベースへINSERTを行います。プリペアドステートメントをを利用します。
※プリペアドステートメントについては『prepareStatementの使用』を参照して下さい。
String dateStr = year + "-" + month + "-" + day; String startTimeStr = shour + ":" + sminute + ":00"; String endTimeStr = ehour + ":" + eminute + ":00"; Connection conn = null; String url = "jdbc:mysql://localhost/servletschedule"; String user = "scheduleuser"; String password = "schedulepass"; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, user, password); String sql = "insert into schedule (userid, scheduledate, starttime, endtime, schedule, schedulememo) values (?, ?, ?, ?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, 1); pstmt.setString(2, dateStr); pstmt.setString(3, startTimeStr); pstmt.setString(4, endTimeStr); pstmt.setString(5, plan); pstmt.setString(6, memo); int num = pstmt.executeUpdate(); pstmt.close(); }catch (ClassNotFoundException e){ out.println("ClassNotFoundException:" + e.getMessage()); }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); }catch (Exception e){ out.println("Exception:" + e.getMessage()); }finally{ try{ if (conn != null){ conn.close(); } }catch (SQLException e){ out.println("SQLException:" + e.getMessage()); } }
またデータベースへの登録が完了したら「MonthView」サーブレットへリダイレクトします。リダイレクトする場合にもパラメータとして年と月に関する情報を渡すのを忘れないようにします。
StringBuffer sb = new StringBuffer(); sb.append("/schedule/MonthView"); sb.append("?YEAR="); sb.append(year); sb.append("&MONTH="); sb.append(month - 1); res.sendRedirect(new String(sb));
これでスケジュールの登録が完了したら、カレンダー画面に戻るようになります。
作成したプログラムは次のようになります。
ScheduleInsert1.java [HTMLで表示]
コンパイルして作成されたクラスファイルを「(root)¥WEB-INF¥classes¥」ディレクトリに配置します。
D:¥servlet-sample | +--schedule | +-- (top.html) | +-- WEB-INF | | | +-- classes | | | +-- (MonthView4.class) | | | +-- (NewSchedule3.class) | | | +-- (ScheduleInsert1.class) | +-- img
また作成したサーブレットを呼び出せるように「web.xml」を次のように書き換えます。
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <servlet> <servlet-name>MonthView</servlet-name> <servlet-class>MonthView4</servlet-class> </servlet> <servlet-mapping> <servlet-name>MonthView</servlet-name> <url-pattern>/MonthView</url-pattern> </servlet-mapping> <servlet> <servlet-name>NewSchedule</servlet-name> <servlet-class>NewSchedule3</servlet-class> </servlet> <servlet-mapping> <servlet-name>NewSchedule</servlet-name> <url-pattern>/NewSchedule</url-pattern> </servlet-mapping> <servlet> <servlet-name>ScheduleInsert</servlet-name> <servlet-class>ScheduleInsert1</servlet-class> </servlet> <servlet-mapping> <servlet-name>ScheduleInsert</servlet-name> <url-pattern>/ScheduleInsert</url-pattern> </servlet-mapping> </web-app>
それではブラウザで「http://localhost:8080/schedule/MonthView」へアクセスします。次のように表示されます。
ここで「15日」の箇所にあるアイコンをクリックして下さい。
スケジュールの内容を適当に入力してから「登録する」ボタンをクリックします。すると「ScheduleInsert」サーブレットが呼び出されデータベースへの登録が行われます。その後「MonthView」サーブレットが呼び出されてカレンダーが表示されます。
見た目上はデータベースへスケジュールが登録されたか分からないのですが、MySQLで確認してみると次のように登録されていることが確認できます。
( Written by Tatsuo Ikura )