- ベストアンサー
JSPからYYYYMMDDで日付入力する
こんにちは。 JSPからサーブレット・Beanを使うプログラムを作っております。 調べてみたのですがわからなくなってきてしまいました。 ぜひご教授ください。 JSPから日付を入力し、DBに日付データを挿入します。 今はBeanから下のようなSQL文で、JSP画面からはフォームに「2008-08-20」と入力して値を挿入しています。 sql = insert into テーブル名 values('?') できればこのフォームに「20080820」と入力させたいと思っています。 そのためにはBeanでSQL文を発行する際に日付を分けて、「2008」+「-」+「08」+「-」+「20」のように間に「-(ハイフン)」を入れてやればいいのはわかるのですが、そのためにはどのようにすればよいか教えてください。 「20080820」を分けて、sql1・sql2・…に入れ、それを実際のSQL文発行の際にsql1+"-"+sql2+…とやるのでしょうか? よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
日付の変換にはSimpleDateFormatが便利です。 ------------------------------------------------------------ String str1 = "20080820"; String str2; // SimpleDateFormatオブジェクトを生成 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd"); // 年月日解析 Date date = simpleDateFormat.parse(str); if(date != null) { // フォーマットパターン変更 simpleDateFormat.applyPattern("yyyy-MM-dd"); // yyyy-MM-dd文字列でフォーマット str2 = simpleDateFormat.format(date); } else { // フォーマット失敗処理 } ------------------------------------------------------------ また、日付フォーマット関数が用意されているDBMSが殆どなので そちらを使うのも宜しいと思います。
その他の回答 (3)
- Kilm
- ベストアンサー率87% (7/8)
今回の場合、str1の文字列日付を変換し、 str2に変換後の文字列日付が格納されるので。 stmt.setString(1,str2); で大丈夫だと思います。
お礼
回答ありがとうございました! 上記のようにしていろいろやってみたところ、うまく変換してDBに登録することができました。
- HIRSYU
- ベストアンサー率51% (45/87)
DB次第ですが、'20080820'でも'2008-08-20'と同じように認識します。 一度、使用しているDBを調べてみてはどうでしょう。
お礼
回答ありがとうございました! 使用しているDBは'20080820'では認識できないようです。 DB次第なのですね。違うDBを使う際のため頭に留めておきます。
- osumitan
- ベストアンサー率33% (102/307)
java.lang.Stringのsubstringを使えばできます。 ----- String s1 = "20080820": String s2 = s1.substring(0,4) + "-" + s1.substring(5,6) + s1.substring(7,8); ----- 細かい使い方はAPIドキュメントを参照してください。 実際にはいきなりsubstringをやると、文字数が足りなかったりすれば 例外(java.lang.StringIndexOutOfBoundsException)が発行されてしまいますし、 文字数が足りていても日付として正しいかどうかわかりませんから、 入力チェックを事前に行う必要があるでしょう。
お礼
回答ありがとうございました! 私が初め考えていたのはこのタイプだったようです。 中途半端な知識でお恥ずかしい限りです。 入力チェックも私にとっては難関なのですが、色々試してみます。
お礼
回答ありがとうございました! SimpleDataFormatでこんな簡単にフォーマットが変えられるとは。 更に初歩的な質問で申し訳ないのですが、フォームから入力した日付 (20080820)を「?」で受け取りそれを変換するということですよね。 そのあとにPreparedStatementに値をセットしていざsql実行だと思うのですが、 >String str1 = "20080820"; の"20080820"の部分は「?」からどう受けたらよいのでしょうか? すみません、よろしくお願いいたします。 ============================================== sql = "insert into テーブル名 values (?)"; ~(コネクション取得)~ **この部分で変換作業** stmt = dbConn.preparedStatement(sql); stmt.setString(1,変換済の日付); stmt.executeUpdate(); //実行 …… =============================================