スケジュールの登録

広告

では作成したスケジュールをデータベースに登録してみます。

スケジュールの登録には「ScheduleInsert」サーブレットを別途用意し、「NewSchedule」内のフォームから呼び出されるようにしてみます。

「NewSchedule」サーブレットからは日付や時刻、スケジュールの内容などをパラメータとして渡されてきます。まずパラメータを取得して表示するところまでを作成してみます。「NewSchedule」サーブレットのフォームの送信先を次のように変更します。

sb.append("<form method=¥"post¥" action=¥"/schedule/ScheduleInsert¥">");

※この部分だけを変更したものを「NewSchedule3.java」として保存しました。

NewSchedule3.java [HTMLで表示]

今回は「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 )