前提・実現したいこと
勉強を始めたばかりの初心者です。
Java(jsp、サーブレット)にて`スケジュール管理のシステムを作成しています。
データベース(PostgreSQL)へ登録済みの予定が各日付部分にデータベースから出力されるように作成しています。(現時点ではカレンダー上の初日のみ作成済み)
しかし前月・来月のボタンを押し、表示している月を変更すると表示されているデータベースからの出力が一切行われません。
前月・来月のボタンを押した際に表示されている日付自体は問題なく変わるので、データベースからの出力部分がうまくいっていないのだとは思いますが、根本的な原因がわからずハマってしまっています。
ご回答いただけると助かります、よろしくお願いします。
JSPページ
jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ page import="calendar.Top" %> 4<%@ page import="java.util.Calendar"%> 5<%@ page import="java.sql.ResultSet" %> 6<%@ page import="java.time.LocalDate" %> 7<%@ page import="java.time.LocalDateTime"%> 8<%@ page import="java.time.LocalTime" %> 9<%@ page import="java.time.format.DateTimeFormatter" %> 10<% 11Calendar calendar = Calendar.getInstance(); 12 13int year; 14int month; 15int day; 16 17//前月・来月に飛んだ場合 18String move = request.getParameter("move"); 19String syear = request.getParameter("year"); 20String smonth = request.getParameter("month"); 21 22if(move==null){ 23 24 //現時点の日付 25year = calendar.get(Calendar.YEAR); 26month = calendar.get(Calendar.MONTH)+1; 27day = calendar.get(Calendar.DATE); 28 29}else{ 30 31year = Integer.parseInt(syear); 32month = Integer.parseInt(smonth); 33day = 1; 34 35if(month==13) { 36 year += 1; 37 month = 1; 38}else if(month==0) { 39 year = year - 1; 40 month = 12; 41}else { 42 year = year; 43 month = month; 44} 45} 46 47//今月最初の曜日 48calendar.set(year,month-1,1); 49int startWeek = calendar.get(Calendar.DAY_OF_WEEK); 50 51//前月の日数 52calendar.set(year,month-1,0); 53int beforedaycount = calendar.get(Calendar.DATE); 54 55//今月の日数・今月最後の曜日 56calendar.set(year,month,0); 57int daycount = calendar.get(Calendar.DATE); 58int lastWeek = calendar.get(Calendar.DAY_OF_WEEK); 59 60//日付用の配列作成 61int [] cl = new int[42]; 62int count = 0; 63 64//先月の日数を格納 65for (int i = startWeek-2 ; i >= 0 ; i--){ 66 cl[count++] = beforedaycount - i; 67 } 68 69//今月の日数を格納 70for(int i = 0;i<=daycount-1;i++) { 71 cl[count++] = 1+i; 72} 73 74//来月の日数を格納 75for(int i=0;i<=7-lastWeek;i++) { 76 cl[count++] = 1+i; 77} 78 79//何週分を格納したか確認 80int weekCount = count / 7; 81 82//データベースへ接続 83Top db = new Top(); 84db.open(); 85 86//データベース出力用 87LocalDate daydate; 88java.sql.Date sqlday; 89ResultSet rs; 90 91%> 92<!DOCTYPE html> 93<html> 94<head> 95<meta charset="UTF-8"> 96<link rel="stylesheet" href="calender.css"> 97<title>calender</title> 98</head> 99<body> 100<main> 101 <h1> 102 <% out.println(year+"年"+month+"月"); %> 103 <% int yearnow=year; %> 104 <% int monthnow=month; %> 105 </h1> 106 <a href="new.jsp">NEW</a> 107 <div class="calender"> 108 <div class="weeks"> 109 <div class="week sunday"> 110 <b>日</b> 111 </div> 112 <div class="week"> 113 <b>月</b> 114 </div> 115 <div class="week"> 116 <b>火</b> 117 </div> 118 <div class="week"> 119 <b>水</b> 120 </div> 121 <div class="week"> 122 <b>木</b> 123 </div> 124 <div class="week"> 125 <b>金</b> 126 </div> 127 <div class="week saturday"> 128 <b>土</b> 129 </div> 130 </div> 131 <div class="days"> 132 133 //カレンダー上の初日 134 <div class="day sunday"> 135 <% int cday = cl[0]; %> 136 <p> 137 <% out.println(cday); %> 138 </p> 139 <div class="apo"> 140 <% 141 //年月日の算出 142 year = db.prevyear(year,month,cday); 143 month = db.prevmonth(year,month,cday); 144 //年月日の変換、データ参照 145 rs = db.getResultSet("select * from calendar where day='"+db.sql(year, month, cday)+"'"); 146 while (rs.next()){ 147 //SQL時間データをLocalへ変換 148 java.sql.Time starttimes = rs.getTime("starttime"); 149 java.sql.Time lasttimes = rs.getTime("lasttime"); 150 //結果出力部分 151 out.print(db.starttime(year,month,day,starttimes)); 152 out.print(db.timewhile(year,month,day,starttimes,lasttimes)); 153 out.print(db.lasttime(year,month,day,lasttimes)); 154 out.print(db.titlewhile(year,month,day,starttimes,lasttimes)); 155 out.println(rs.getString("title")); 156 out.println(""); 157 %> 158 <br> 159 <% 160 //year,monthを初期値へ戻す 161 month = monthnow; 162 year = yearnow; 163 }%> 164 </div> 165 </div> 166 167 //カレンダー上の2日目 168 <div class="day"> 169 <p> 170 <% out.println(cl[1]); %> 171 </p> 172 <div class="apo"> 173 </div> 174 </div> 175 176 -中略- 177 178 </div> 179 <% }else{ 180 System.out.print(""); 181 }%> 182 </div> 183 <a class="prev" href="calender.jsp?move=prev&year=<%= year %>&month=<%= monthnow-1 %>">前月</a> 184 <a class="next" href="calender.jsp?move=next&year=<%= year %>&month=<%= monthnow+1 %>">来月</a> 185 </main> 186</body> 187</html>
インポートしているオリジナルクラス
Java
1package calendar; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.ResultSet; 6import java.sql.Statement; 7import java.time.LocalDate; 8import java.time.LocalDateTime; 9import java.time.LocalTime; 10import java.time.format.DateTimeFormatter; 11 12public class Top { 13 14 private String url; 15 private String user; 16 private String password; 17 private Connection conn; 18 private Statement state; 19 private ResultSet rs; 20 21 public Top() { 22 url = "-省略-"; 23 user = "-省略-"; 24 password = "-省略-"; 25 } 26 27 //データベースへの接続する 28 public void open() throws Exception { 29 conn = DriverManager.getConnection(url, user, password); 30 state = conn.createStatement(); 31 } 32 33 //SQL 文を実行した結果の ResultSet を返す 34 public ResultSet getResultSet(String sql) throws Exception { 35 if ( state.execute(sql) ) { 36 return state.getResultSet(); 37 } 38 return null; 39 } 40 41 //データベースを閉じる 42 public void close() throws Exception { 43 if ( rs != null ) rs.close(); 44 if ( state != null ) state.close(); 45 if ( conn != null ) conn.close(); 46 } 47 48 //年の固定(前月分日付の場合) 49 public int prevyear (int year,int month,int day) { 50 if(day>20 && month==1){ 51 return year -= 1; 52 }else{ 53 return year; 54 } 55 } 56 57 //月の固定(前月分日付の場合) 58 public int prevmonth (int year,int month,int day) { 59 if(day>20 && month==1){ 60 return month = 12; 61 }else{ 62 return month -=1; 63 } 64 } 65 66 //年の固定(来月分日付の場合) 67 public int nextyear (int year,int month,int day) { 68 if(day>20 && month==12){ 69 return year += 1; 70 }else{ 71 return year; 72 } 73 } 74 75 //月の固定(来月分日付の場合) 76 public int nextmonth (int year,int month,int day) { 77 if(day>20 && month==12){ 78 return month = 1; 79 }else{ 80 return month +=1; 81 } 82 } 83 84 //予定開始時間の出力 85 public String starttime(int year,int month,int day,java.sql.Time starttimes) { 86 87 DateTimeFormatter dtformat1 = DateTimeFormatter.ofPattern("HH:mm"); 88 89 if(starttimes==null) { 90 return ""; 91 92 }else { 93 94 //SQL時間データをLocalへ変換 95 LocalTime starttimet = starttimes.toLocalTime(); 96 LocalDateTime starttimel = starttimet.atDate(LocalDate.of(year, month, day)); 97 98 //時間の表示方法指定 99 String stime = dtformat1.format(starttimel); 100 101 return stime; 102 } 103 } 104 105//予定開始時間と終了時間間の「~」の出力 106 public String timewhile(int year,int month,int day,java.sql.Time starttimes,java.sql.Time lasttimes) { 107 if(starttimes==null && lasttimes==null) { 108 return ""; 109 }else { 110 return "~"; 111 } 112 } 113 114 //予定終了時間の出力 115 public String lasttime(int year,int month,int day,java.sql.Time lasttimes) { 116 117 DateTimeFormatter dtformat1 = DateTimeFormatter.ofPattern("HH:mm"); 118 119 if(lasttimes==null) { 120 return ""; 121 }else { 122 123 //SQL時間データをLocalへ変換 124 125 LocalTime lasttimet = lasttimes.toLocalTime(); 126 LocalDateTime lasttime = lasttimet.atDate(LocalDate.of(year, month, day)); 127 128 //時間の表示方法指定 129 String ltime = dtformat1.format(lasttime); 130 131 return ltime; 132 } 133 } 134 135 //時間と予定名間の「:」の出力 136 public String titlewhile(int year,int month,int day,java.sql.Time starttimes,java.sql.Time lasttimes) { 137 if(starttimes==null && lasttimes==null) { 138 return ""; 139 }else { 140 return ":"; 141 } 142 } 143 144 //SQLから取り出したデータ型の変換 145 public java.sql.Date sql (int year,int month,int day){ 146 LocalDate daydate = LocalDate.of(year, month, day); 147 java.sql.Date sqlday = java.sql.Date.valueOf(daydate); 148 return sqlday; 149 } 150 151} 152 153 154
回答2件
あなたの回答
tips
プレビュー