- Home ›
- サーブレット/JSP入門 ›
- スケジュール管理 ›
- HERE
EditSchedule2.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Calendar;
import java.sql.*;
public class EditSchedule2 extends HttpServlet{
protected Connection conn = null;
public void init() throws ServletException{
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);
}catch (ClassNotFoundException e){
log("ClassNotFoundException:" + e.getMessage());
}catch (SQLException e){
log("SQLException:" + e.getMessage());
}catch (Exception e){
log("Exception:" + e.getMessage());
}
}
public void destory(){
try{
if (conn != null){
conn.close();
}
}catch (SQLException e){
log("SQLException:" + e.getMessage());
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html;charset=Shift_Jis");
PrintWriter out = res.getWriter();
int year = -1;
int month = -1;
int day = -1;
int currentscheduleid;
String currentStartTime = "";
String currentEndTime = "";
String currentSchedule = "";
String currentMemo = "";
String param = req.getParameter("ID");
if (param == null || param.length() == 0){
currentscheduleid = -1;
}else{
try{
currentscheduleid = Integer.parseInt(param);
}catch (NumberFormatException e){
currentscheduleid = -1;
}
}
/* パラメータが不正な場合はトップページへリダイレクト */
if (currentscheduleid == -1){
res.sendRedirect("/schedule/top.html");
}
/* ユーザー情報を取り出す */
HttpSession session = req.getSession(false);
String username = (String)session.getAttribute("username");
String tmpuserid = (String)session.getAttribute("userid");
int userid = 0;
if (tmpuserid != null){
userid = Integer.parseInt(tmpuserid);
}
try {
String sql = "SELECT * FROM schedule WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, currentscheduleid);
ResultSet rs = pstmt.executeQuery();
rs.next();
String scheduledate = rs.getString("scheduledate");
String yearStr = scheduledate.substring(0, 4);
String monthStr = scheduledate.substring(5, 7);
String dayStr = scheduledate.substring(8, 10);
year = Integer.parseInt(yearStr);
month = Integer.parseInt(monthStr) - 1;
day = Integer.parseInt(dayStr);
currentStartTime = rs.getString("starttime");
currentEndTime = rs.getString("endtime");
currentSchedule = rs.getString("schedule");
currentMemo = rs.getString("schedulememo");
rs.close();
pstmt.close();
}catch (SQLException e){
log("SQLException:" + e.getMessage());
}
StringBuffer sb = new StringBuffer();
sb.append("<!DOCTYPE html PUBLIC ¥"-//W3C//DTD HTML 4.0.1//EN¥" ¥"http://www.w3.org/TR/html4/strict.dtd¥">");
sb.append("<html lang=¥"ja¥">");
sb.append("<head>");
sb.append("<meta http-equiv=¥"Content-Type¥" Content=¥"text/html;charset=Shift_JIS¥">");
sb.append("<title>スケジュール変更</title>");
sb.append("<style>");
sb.append("table.sche{border:1px solid #a9a9a9;padding:0px;margin:0px;border-collapse:collapse;}");
sb.append("td{vertical-align:top;margin:0px;padding:2px;font-size:0.75em;height:20px;}");
sb.append("td.top{border-bottom:1px solid #a9a9a9;text-align:center;}");
sb.append("td.time{background-color:#f0f8ff;text-align:right;border-right:1px double #a9a9a9;padding-right:5px;}");
sb.append("td.timeb{background-color:#f0f8ff;border-bottom:1px solid #a9a9a9;border-right:1px double #a9a9a9;}");
sb.append("td.contents{background-color:#ffffff;border-bottom:1px dotted #a9a9a9;}");
sb.append("td.contentsb{background-color:#ffffff;border-bottom:1px solid #a9a9a9;}");
sb.append("td.ex{background-color:#ffebcd;border:1px solid #8b0000;}");
sb.append("table.view{border:1px solid #a9a9a9;padding:0px;margin:0px;border-collapse:collapse;width:250px}");
sb.append("table.view td{border:1px solid #a9a9a9;}");
sb.append("table.view td.left{width:70px;background-color:#f0f8ff;}");
sb.append("img{border:0px;}");
sb.append("p{font-size:0.75em;}");
sb.append("#contents{margin:0;padding:0;width:710px;}");
sb.append("#left{margin:0;padding:0;float:left;width:400px;}");
sb.append("#right{margin:0;padding:0;float:right;width:300px;background-color:#ffffff;}");
sb.append("#contents:after{content:¥".¥";display:block;height:0;clear:both;visibility:hidden;}");
sb.append("</style>");
sb.append("</head>");
sb.append("<body>");
sb.append("<p>");
sb.append(username);
sb.append("さんのスケジュールです");
sb.append("</p>");
sb.append("<p>");
sb.append("スケジュールの変更 ");
sb.append("[<a href=¥"/schedule/ScheduleView?ID=");
sb.append(currentscheduleid);
sb.append("¥">スケジュール表示に戻る</a>]");
sb.append("</p>");
String[] scheduleArray = new String[49];
int[] widthArray = new int[49];
for (int i = 0 ; i < 49 ; i++){
scheduleArray[i] = "";
widthArray[i] = 0;
}
try {
String sql = "SELECT * FROM schedule WHERE userid = ? and scheduledate = ? ORDER BY starttime";
PreparedStatement pstmt = conn.prepareStatement(sql);
String startDateStr = year + "-" + (month + 1) + "-" + day;
pstmt.setInt(1, userid);
pstmt.setString(2, startDateStr);
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
int id = rs.getInt("id");
String starttime = rs.getString("starttime");
String endtime = rs.getString("endtime");
String schedule = rs.getString("schedule");
if (starttime == null || endtime == null){
widthArray[0] = 1;
StringBuffer sbSchedule = new StringBuffer();
sbSchedule.append("<a href=¥"/schedule/ScheduleView?ID=");
sbSchedule.append(id);
sbSchedule.append("¥">");
sbSchedule.append(schedule);
sbSchedule.append("</a>");
scheduleArray[0] = scheduleArray[0] + (new String(sbSchedule)) + "<br>";
}else{
String startTimeStr = starttime.substring(0, 2);
String startMinuteStr = starttime.substring(3, 5);
int startTimeNum = Integer.parseInt(startTimeStr);
int index = startTimeNum * 2 + 1;
if (startMinuteStr.equals("30")){
index++;
}
if (widthArray[index] == 0){
/* 既にデータが入っていた場合は異常な状態なので無視する */
String endTimeStr = endtime.substring(0, 2);
String endMinuteStr = endtime.substring(3, 5);
int endTimeNum = Integer.parseInt(endTimeStr);
int width = (endTimeNum - startTimeNum) * 2;
if (startMinuteStr.equals("30")){
width--;
}
if (endMinuteStr.equals("30")){
width++;
}
StringBuffer sbSchedule = new StringBuffer();
sbSchedule.append(startTimeStr);
sbSchedule.append(":");
sbSchedule.append(startMinuteStr);
sbSchedule.append("-");
sbSchedule.append(endTimeStr);
sbSchedule.append(":");
sbSchedule.append(endMinuteStr);
sbSchedule.append(" ");
sbSchedule.append("<a href=¥"/schedule/ScheduleView?ID=");
sbSchedule.append(id);
sbSchedule.append("¥">");
sbSchedule.append(schedule);
sbSchedule.append("</a>");
scheduleArray[index] = new String(sbSchedule);
widthArray[index] = width;
/* 同じスケジュールの先頭以外の箇所には「-1」を設定 */
for (int i = 1 ; i < width ; i++){
widthArray[index + i] = -1;
}
}
}
}
rs.close();
pstmt.close();
}catch (SQLException e){
log("SQLException:" + e.getMessage());
}
sb.append("<div id=¥"contents¥">");
sb.append("<div id=¥"left¥">");
sb.append("<table class=¥"sche¥">");
sb.append("<tr><td class=¥"top¥" style=¥"width:80px¥">時刻</td><td class=¥"top¥" style=¥"width:300px¥">予定</td></tr>");
sb.append("<tr><td class=¥"timeb¥">未定</td>");
sb.append("<td class=¥"contentsb¥">");
if (widthArray[0] == 1){
sb.append(scheduleArray[0]);
}
sb.append("</td></tr>");
for (int i = 1 ; i < 49 ; i++){
if (i % 2 == 1){
sb.append("<tr><td class=¥"time¥">");
sb.append(i / 2);
sb.append(":00</td>");
}else{
sb.append("<tr><td class=¥"timeb¥"></td>");
}
if (widthArray[i] != 0){
if (widthArray[i] != -1){
sb.append("<td class=¥"ex¥" rowspan=¥"");
sb.append(widthArray[i]);
sb.append("¥">");
sb.append(scheduleArray[i]);
}
}else{
if (i % 2 == 1){
sb.append("<td class=¥"contents¥">");
}else{
sb.append("<td class=¥"contentsb¥">");
}
}
sb.append("</td></tr>");
}
sb.append("</table>");
sb.append("</div>");
sb.append("<div id=¥"right¥">");
sb.append("<form method=¥"post¥" action=¥"/schedule/ScheduleUpdate¥">");
sb.append("<table>");
sb.append("<tr>");
sb.append("<td nowrap>日付</td>");
sb.append("<td>");
sb.append("<select name=¥"YEAR¥">");
for (int i = 2005 ; i <= 2010 ; i++){
sb.append("<option value=¥"");
sb.append(i);
sb.append("¥"");
if (i == year){
sb.append(" selected");
}
sb.append(">");
sb.append(i);
sb.append("年");
}
sb.append("</select> ");
sb.append("<select name=¥"MONTH¥">");
for (int i = 1 ; i <= 12 ; i++){
sb.append("<option value=¥"");
sb.append(i);
sb.append("¥"");
if (i == (month + 1)){
sb.append(" selected");
}
sb.append(">");
sb.append(i);
sb.append("月");
}
sb.append("</select> ");
sb.append("<select name=¥"DAY¥">");
int monthLastDay = getMonthLastDay(year, month, day);
for (int i = 1 ; i <= monthLastDay ; i++){
sb.append("<option value=¥"");
sb.append(i);
sb.append("¥"");
if (i == day){
sb.append(" selected");
}
sb.append(">");
sb.append(i);
sb.append("日");
}
sb.append("</select>");
sb.append("</td>");
sb.append("</tr>");
sb.append("<tr>");
sb.append("<td nowrap>時刻</td>");
sb.append("<td>");
sb.append("<select name=¥"SHOUR¥">");
if (currentStartTime == null){
sb.append("<option value=¥"¥" selected>--時");
for (int i = 0 ; i <= 23 ; i++){
sb.append("<option value=¥"");
sb.append(i);
sb.append("¥">");
sb.append(i);
sb.append("時");
}
}else{
sb.append("<option value=¥"¥">--時");
int shour = Integer.parseInt(currentStartTime.substring(0, 2));
for (int i = 0 ; i <= 23 ; i++){
sb.append("<option value=¥"");
sb.append(i);
sb.append("¥"");
if (i == shour){
sb.append(" selected");
}
sb.append(">");
sb.append(i);
sb.append("時");
}
}
sb.append("</select> ");
sb.append("<select name=¥"SMINUTE¥">");
if (currentStartTime == null){
sb.append("<option value=¥"0¥" selected>00分");
sb.append("<option value=¥"30¥">30分");
}else{
String sminute = currentStartTime.substring(3, 5);
if (sminute.equals("00")){
sb.append("<option value=¥"0¥" selected>00分");
sb.append("<option value=¥"30¥">30分");
}else{
sb.append("<option value=¥"0¥">00分");
sb.append("<option value=¥"30¥" selected>30分");
}
}
sb.append("</select>");
sb.append(" -- ");
sb.append("<select name=¥"EHOUR¥">");
if (currentEndTime == null){
sb.append("<option value=¥"¥" selected>--時");
for (int i = 0 ; i <= 23 ; i++){
sb.append("<option value=¥"");
sb.append(i);
sb.append("¥">");
sb.append(i);
sb.append("時");
}
}else{
sb.append("<option value=¥"¥">--時");
int ehour = Integer.parseInt(currentEndTime.substring(0, 2));
for (int i = 0 ; i <= 23 ; i++){
sb.append("<option value=¥"");
sb.append(i);
sb.append("¥"");
if (i == ehour){
sb.append(" selected");
}
sb.append(">");
sb.append(i);
sb.append("時");
}
}
sb.append("</select> ");
sb.append("<select name=¥"EMINUTE¥">");
if (currentEndTime == null){
sb.append("<option value=¥"0¥" selected>00分");
sb.append("<option value=¥"30¥">30分");
}else{
String eminute = currentEndTime.substring(3, 5);
if (eminute.equals("00")){
sb.append("<option value=¥"0¥" selected>00分");
sb.append("<option value=¥"30¥">30分");
}else{
sb.append("<option value=¥"0¥">00分");
sb.append("<option value=¥"30¥" selected>30分");
}
}
sb.append("</select>");
sb.append("</td>");
sb.append("</tr>");
sb.append("<tr>");
sb.append("<td nowrap>予定</td>");
sb.append("<td><input type=¥"text¥" name=¥"PLAN¥" value=¥"");
sb.append(currentSchedule);
sb.append("¥" size=¥"30¥" maxlength=¥"100¥">");
sb.append("</td>");
sb.append("</tr>");
sb.append("<tr>");
sb.append("<td valign=¥"top¥" nowrap>メモ</td>");
sb.append("<td><textarea name=¥"MEMO¥" cols=¥"30¥" rows=¥"10¥" wrap=¥"virtual¥">");
sb.append(currentMemo);
sb.append("</textarea></td>");
sb.append("</tr>");
sb.append("</table>");
sb.append("<p>");
/* 変更するスケジュールの「ID」を隠し項目として設定 */
sb.append("<input type=¥"hidden¥" name=¥"ID¥" value=¥"");
sb.append(currentscheduleid);
sb.append("¥">");
sb.append("<input type=¥"submit¥" name=¥"Register¥" value=¥"変更する¥">");
sb.append("<p>");
sb.append("</form>");
sb.append("</div>");
sb.append("</div>");
sb.append("</body>");
sb.append("</html>");
out.println(new String(sb));
}
protected int getMonthLastDay(int year, int month, int day){
Calendar calendar = Calendar.getInstance();
/* 今月が何日までかを確認する */
calendar.set(year, month + 1, 0);
int thisMonthlastDay = calendar.get(Calendar.DATE);
return thisMonthlastDay;
}
}
( Written by Tatsuo Ikura )
JavaDrive