質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

1697閲覧

java.util.calenderで取得した情報をsqlにinsertするとnullになってしまいます

yuichikubo

総合スコア12

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2016/09/25 23:35

編集2016/09/26 04:32

現在javaとmysqlを用いてeclipseにて簡単なメモアプリを作成しております。
内容としてはメモのタイトル及び内容を書いて登録していくものなのですが、その際にjava.util.calenderで現在時刻を取得し、それも一緒に保存しようと思っています。
ただ保存の処理を行おうとすると

エラーメッセージ

Data truncation: Incorrect datetime value: 'null' for column 'INSERT_DATETIME' at row 1

とうまく渡すことができません。
java.util.calenderで取得した情報は別の何かに変換する必要があるのでしょうか?

よろしくお願いいたします。

java

1MemoServlet.java 2 3package pack; 4 5import java.io.IOException; 6 7一部省略 8 9 10/** 11 * 登録要求を処理します。 12 * 13 * @param req 14 * @param resp 15 * @return 16 * @throws ServletException 17 * @throws IOException 18 */ 19 private String doAddAction(HttpServletRequest req, HttpServletResponse resp) 20 throws ServletException, IOException { 21 try { 22 String memoId = req.getParameter("memo_id"); 23 String userId = req.getParameter("user_id"); 24 String title = req.getParameter("title"); 25 String content = req.getParameter("content"); 26 String Year = req.getParameter("year"); 27 String Month = req.getParameter("month"); 28 String Day = req.getParameter("day"); 29 String Hour = req.getParameter("hour"); 30 String Minute = req.getParameter("minute"); 31 String Second = req.getParameter("second"); 32 if (title == null && content == null) { 33 return doError(req, resp, "不正なパラメータです。"); 34 } 35 36 Memo targetMemo = new Memo(); 37 38 targetMemo.setId(memoId); 39 targetMemo.setUserId(userId); 40 targetMemo.setTitle(title); 41 targetMemo.setMemo(content); 42 43 Date date = getDate(Year, Month, Day, Hour, Minute, Second); 44 45 targetMemo.setInsertDate(date); 46 47 executeUpdate(createInsertSQL(targetMemo)); 48 49 // メモを取得する 50 Memo[] memos = getMemos(); 51 52 // メモを要求オブジェクトに格納する 53 req.setAttribute("memos", memos); 54 55 // 一覧を表示する 56 return JSP_BASE + "list.jsp"; 57 } catch (SQLException e) { 58 return doError(req, resp, e.getMessage()); 59 } 60 } 61 62 /** 63 * エラーを表示します。 64 * 65 * @param req 66 * @param resp 67 * @param message 68 * @return 69 * @throws ServletException 70 * @throws IOException 71 */ 72 73 private String doError(HttpServletRequest req, HttpServletResponse resp, 74 String message) throws ServletException, IOException { 75 req.setAttribute("message", message); 76 77 // エラーを表示する 78 return JSP_BASE + "error.jsp"; 79 } 80 81一部省略 82 83/** 84 * INSERT/UPDATE/DELETE文を実行します。 85 * 86 * @param sql 87 * @return 88 * @throws ServletException 89 */ 90 private int executeUpdate(String sql) throws SQLException { 91 Statement statement = null; 92 try { 93 // SQL文を発行 94 statement = getConnection().createStatement(); 95 int updateCount = statement.executeUpdate(sql); 96 97 return updateCount; 98 } catch (SQLException e) { 99 _pooledConnection = null; 100 throw e; 101 } finally { 102 if (statement != null) { 103 statement.close(); 104 statement = null; 105 } 106 } 107 } 108 /** 109 * メモ取得用のSQL文を生成します。 110 * 111 * @param where 112 * @return 113 */ 114 private String createSQL(String where) { 115 StringBuffer buf = new StringBuffer(); 116 buf 117 .append("SELECT MEMO.MEMO_ID,MEMO.USER_ID,USER.USER_ID,USER.USER_NAME,MEMO.TITLE,MEMO.MEMO,MEMO.INSERT_DATETIME,MEMO.UPDATE_DATETIME FROM USER,MEMO WHERE USER.USER_ID=MEMO.USER_ID"); 118 if (where != null) { 119 buf.append(" AND "); 120 buf.append(where); 121 } 122 return buf.toString(); 123 } 124 125 /** 126 * 日付オブジェクトを取得します。 127 * 128 * @param year 129 * @param month 130 * @param day 131 * @param hour 132 * @param minute 133 * @param second 134 * @return 135 * @throws ServletException 136 */ 137 private Date getDate(String year, String month, String day, String hour, String minute, String second) { 138 try { 139 Calendar calendar = Calendar.getInstance(); 140 calendar.clear(); 141 calendar.set(Integer.parseInt(year), Integer.parseInt(month) - 1, 142 Integer.parseInt(day),Integer.parseInt(hour), Integer.parseInt(minute), 143 Integer.parseInt(second)); 144 145 return new Date(calendar.getTimeInMillis()); 146 } catch (NumberFormatException e) { 147 return null; 148 } 149 } 150/** 151 * 追加用のSQL文を生成します。 152 * 153 * @param targetMemo 154 * @return 155 */ 156 private String createInsertSQL(Memo targetMemo) { 157 StringBuffer buf = new StringBuffer(); 158 buf.append("INSERT INTO "); 159 buf.append("MEMO"); 160 buf.append(" (MEMO_ID,USER_ID,TITLE,MEMO,INSERT_DATETIME,UPDATE_DATETIME)"); 161 buf.append(" VALUES('"); 162 buf.append(targetMemo.getId()); 163 buf.append("', '"); 164 buf.append(targetMemo.getUserId()); 165 buf.append("', '"); 166 buf.append(targetMemo.getTitle()); 167 buf.append("', '"); 168 buf.append(targetMemo.getMemo()); 169 buf.append("', '"); 170 buf.append(targetMemo.getInsertDate()); 171 buf.append("', '"); 172 buf.append(targetMemo.getUpdateDate()); 173 buf.append("')"); 174 175 return buf.toString(); 176 } 177

html

1add.jsp 2 3<%@ page language="java" contentType="text/html; charset=utf-8" %> 4<%@ page import="pack.User" %> 5<%@ page import="pack.Memo" %> 6<%@ page import="java.util.*" %> 7<%@ page import="java.text.*" %> 8<% 9 User currentUser = (User) request.getSession().getAttribute("currentUser"); 10 User[] users = (User[]) request.getAttribute("users"); 11%> 12<html> 13 <head> 14 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 15 <title>メモ入力</title> 16 <link rel="STYLESHEET" href="todo.css" type="text/css"> 17 </head> 18 <body> 19 <div align="center"> 20 <table border="0"> 21 <form action="todo" method="post"> 22 <input type="hidden" name="action" value="add_action"> 23 <tr> 24 <th class="add_field"> 25 メモID 26 </th> 27 <td class="add_field"> 28 <input type="text" name="memo_id" value="" size="24" maxlength="10"> 29 </td> 30 </tr> 31 <tr> 32 <th class="add_field"> 33 タイトル 34 </th> 35 <td class="add_field"> 36 <input type="text" name="title" value="" size="24" maxlength="20"> 37 </td> 38 </tr> 39 <tr> 40 <th class="add_field"> 41 内容 42 </th> 43 <td class="add_field"> 44 <input type="text" name="content" value="" size="24" maxlength="100"> 45 </td> 46 </tr> 47 <tr> 48 <input type="hidden" name="user_id" value="<%= currentUser.getId()%>"> 49 <td align="left"> 50 登録者 51 </td> 52 <td> 53 <%= currentUser.getName() %> 54 </td> 55 <td align="right"> 56 登録日時 57 </td> 58 <td class="add_field"> 59 60 <% 61 Calendar calendar = Calendar.getInstance(); 62 %> 63 <input type="hidden" name="year" value="" id="toshi"><label for="toshi"><%= calendar.get(Calendar.YEAR) %>/</label> 64 <input type="hidden" name="month" value="" id="tsuki"><label for="tsuki"><%= calendar.get(Calendar.MONTH) + 1 %>/</label> 65 <input type="hidden" name="day" value="" id="nichi"><label for="nichi"><%= calendar.get(Calendar.DAY_OF_MONTH) %>/ </label> 66 <input type="hidden" name="hour" value="" id="jikan"><label for="jikan"><%= calendar.get(Calendar.HOUR_OF_DAY) %>:</label> 67 <input type="hidden" name="minute" value="" id="hun"><label for="hun"><%= calendar.get(Calendar.MINUTE) %>:</label> 68 <input type="hidden" name="second" value="" id="byou"><label for="byou"><%= calendar.get(Calendar.SECOND) %></label> 69 </td> 70 <td> 71 <input type="submit" value="登録"> 72 </td> 73 </tr> 74 </form> 75 <tr> 76 <form action="todo" method="post"> 77 <input type="hidden" name="action" value="list"> 78 <td> 79 <input type="submit" value="一覧へ戻る"> 80 </td> 81 </form> 82 </tr> 83 </table> 84 </div> 85 </body> 86</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

日付(year,...)のinputタグのvalue属性に値を設定してないから、サーブレット側に値が空文字として送信されていると思います。

以下のようにすればよいのでは?

<input type="hidden" name="year" value="<%= calendar.get(Calendar.YEAR) %>" id="toshi"> <label for="toshi"><%= calendar.get(Calendar.YEAR) %>/</label> <input type="hidden" name="month" value="<%= calendar.get(Calendar.MONTH) + 1 %>" id="tsuki"> <label for="tsuki"><%= calendar.get(Calendar.MONTH) + 1 %>/</label> ・ ・ ・

投稿2016/09/26 05:05

java-beginner

総合スコア452

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuichikubo

2016/09/26 05:14

ありがとうございます。 仰る通りvalueにも同じ値を入れましたら、無事登録できるようになりました!
guest

0

inputタグにdisabledが付いているので、サーバ側のHttpServletRequest#getParamegerで取得した値がnullになっていて、
Integer.praseIntでNullPointerExceptionが発生しているのだと思います。

disabledをつけているのは編集不可にしたいからだと思いますので、
spanやlabelなどで表示し、hiddenでサーバ側へPOSTする値を持てがやりたいことができるかなと思います。

投稿2016/09/26 03:38

ijufumi

総合スコア276

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuichikubo

2016/09/26 04:33

ありがとうございます。 ご指示いただきました通りしましたが、同じエラーがでてしまいました。 修正箇所がご指示いただいたものと違うからでしょうか?
guest

0

spanタグだと送信情報として扱われないかと・・
とりあえず、inputタグに変えたら動くのではないかと思います。

あと、chormeを使っている場合はツール使うと便利です。
送信した情報の中身とか調べることができます。
http://www.buildinsider.net/web/chromedevtools/01

投稿2016/09/25 23:46

COHENZ

総合スコア52

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuichikubo

2016/09/26 00:09

ありがとうございます。 ご指示いただきましたとおりに変更してみましたが、同じエラーが出てしまいました。 この方法ではデータとして格納できないのでしょうか?
COHENZ

2016/09/26 00:21

うーむ。servelet側で指定のリクエストパラメータが受け取れているか、getDate関数でエラーが起きてないか確認できますでしょうか? 例外が発生したときに、return nullしているので・・
yuichikubo

2016/09/26 00:25

大変恐縮なのですが、どのように確認をすればよいか教えて頂けないでしょうか?
COHENZ

2016/09/26 00:40

逆質問で申し訳ないですが、そもそも質問されている事象がdoAddActionでエラーが起きているというのは、どうやって判断しているのでしょうか? ログなりコンソールなりで確認していると思うのですが・・・ 確認できてるなら、気になる値をそこへ出力すればよいだけでは?
yuichikubo

2016/09/26 00:55

仰る通りコンソールやログで確認しております。 ただ知識不足で大変恐縮なのですが、今回のこのエラーメッセージは実際に「登録」のボタンを押した時に画面表示されるのみでコンソールやログにそれに関する情報がなく(調べ方が悪いかもしれないです)、考えられる箇所としてdoAddactionかcreateInsertSQLではないかと思い、質問させていただきました。 検討違いな返答になっていたら申し訳ありません。
COHENZ

2016/09/26 01:46

質問にあるソースコードには詳細は無いですが、doErrorという関数で、例外をエラー画面に表示するような処理がありませんか? getDate関数のtry catchをいったん外して、doAddActionのtry catchをSQLExceptionからExceptionに変更したら違ったエラーになりませんでしょうか?
yuichikubo

2016/09/26 01:57

doErrorはあります。ソースコードに追加しました。 ご指示いただきました通りやりましたら画面に表示させるエラー内容が「null」のみになりました。
COHENZ

2016/09/26 19:47

あらら・・灯台下暗しでした。ミスリードばかりで申し訳ございません。
yuichikubo

2016/09/26 20:26

いえいえそんなことはありません。いろいろとアドバイスをいただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問