• ベストアンサー

HashMapについて

【Java-Class】 JavaでDBの終了まで、日付・DB有無フラグを退避する。 【JSP】 DB有無フラグが存在する場合は"・"をカレンダーに表示する。 という処理を行いたいと思います。 HashMapを使用して put(),get()を使用したいと思いますが、get()を実行した際にNullPointerExceptionが表示されてしまいます。 エラーを見る限りではputの際に配列に設定していないのが原因なのではないかと思いますが、 修正方法がよくわかりません。 どうかよろしくお願いします。 ===DBSelect.java================================= CalenderHash hash = new CalenderHash(); /* DB終了まで */ while(rs.next()){ // 値の格納 hash.HashPut(rs.getString(YMD), "1"); } ===CalenderHash.java============================= public class CalenderHash { protected HashMap ht; public CalenderHash(){ } public void HashPut(Object YMD,Object Flg){ ht.put(YMD,Flg); } public Object get( Object key ) { return(ht.get(key)); } ==JSPの一部 ============================ for ( int i=1; i<=6; i++){ out.println("<TR ALIGN='right'>"); out.println("<TD>"); <省略> YearMD = year + month + Day; mark = ""; // 値の取得 if ( hash.get(YearMD).equals("1")){ mark = "・"; } %> <A HREF="/Schedule/jsp/memo.jsp?Ymd=<%= YearMD %> "><%= mark %><%= cntday %></A> &nbsp; <% } out.println("</TD>"); } out.println("</TR>"); }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.7

JAVAとJSPとの受け渡しは、どのようになってますか? 多分そこがおかしいかと・・・。 普通に渡せていれば、JSP側で単純にgetするだけです。

-cinq-
質問者

補足

やはりそうですか。 現在は受け渡しを行ってないです。 PutしたデータをJSP側に渡すには 具体的にはどのように設定するのですか? ===== Servlet ====== <省略> request.setAttribute("year", year); request.setAttribute("month", month); String YMD = year + month + "01"; /* カレンダー処理 */ Dbconnect connect = new Dbconnect(); Calendar calen = Calendar.getInstance(); calen.set(Integer.parseInt(year),Integer.parseInt(month) - 1,1); maxday = Integer.toString(calen.getActualMaximum(Calendar.DATE)); maxday = year + month + maxday; connect.chkShedule(YMD,maxday); request.getRequestDispatcher("/jsp/calender.jsp").forward(request,response); } ===== Java ====== public void chkShedule(String YMD,String maxday){ /*HashMapクラスの生成 */ CalenderHash hash = new CalenderHash(); <省略> /* DB終了まで */ while(rs.next()){ // 値の格納 hash.HashPut(rs.getString("YMD"), "1"); } <省略> }

すると、全ての回答が全文表示されます。

その他の回答 (12)

  • kazsharp
  • ベストアンサー率37% (16/43)
回答No.2

protected HashMap ht; のとこを protected HashMap ht = new HashMap(); にしてみては?

-cinq-
質問者

お礼

ご回答ありがとうございました。 上記のロジックを参考にさせて戴きました。

すると、全ての回答が全文表示されます。
回答No.1

実物見てないので憶測だけど・・・、 1. // 値の格納 hash.HashPut(rs.getString(YMD), "1"); } は取れてるのか? (DBから値が取れている、HashMapにsetできているなど) 2. JSPではなく、JAVA側でgetした場合は取れるのか? >>putの際に配列に設定していないのが原因なのではないかと思いますが、 HashMapなので、関係ないかと・・・。 って言うか、配列に設定するとは???

-cinq-
質問者

補足

回答ありがとうございました。 よくみてみたら、DBから値が取れていない事が わかりました。 (1)を出力するとtrueで返ってきていますが その後、列名が無効ですと表示されています。 SQL*Plus等で実行すると正しい結果がとれています。 どこか不備な点があればご指摘願います。 /* JDBCドライバロード */ Class.forName(driver); /* DB接続 */ connection = DriverManager.getConnection(url,userid,passwd); /* SQL文をDBに送るためのオブジェクを生成 */ Statement statement = connection.createStatement(); /* SQL生成 */ SQL = "SELECT * FROM Schdule"; SQL = SQL + " WHERE YMD >=" + "'" + YMD + "'"; SQL = SQL + " AND YMD <=" + "'" + maxday + "'" ; ResultSet rs = statement.executeQuery(SQL); /* DB終了まで */ while(rs.next()){    ====(1)===== // 値の格納 hash.HashPut(rs.getString(YMD), "1"); } rs.close(); statement.close();

すると、全ての回答が全文表示されます。

関連するQ&A