アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。
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+…とやるのでしょうか?

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

A 回答 (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が殆どなので
そちらを使うのも宜しいと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
SimpleDataFormatでこんな簡単にフォーマットが変えられるとは。
更に初歩的な質問で申し訳ないのですが、フォームから入力した日付
(20080820)を「?」で受け取りそれを変換するということですよね。
そのあとにPreparedStatementに値をセットしていざsql実行だと思うのですが、
>String str1 = "20080820";
の"20080820"の部分は「?」からどう受けたらよいのでしょうか?

すみません、よろしくお願いいたします。

==============================================
sql = "insert into テーブル名 values (?)";

~(コネクション取得)~
  **この部分で変換作業**
stmt = dbConn.preparedStatement(sql); 
stmt.setString(1,変換済の日付);
stmt.executeUpdate(); //実行 ……
=============================================

お礼日時:2008/08/22 18:05

今回の場合、str1の文字列日付を変換し、


str2に変換後の文字列日付が格納されるので。
stmt.setString(1,str2);
で大丈夫だと思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
上記のようにしていろいろやってみたところ、うまく変換してDBに登録することができました。

お礼日時:2008/08/25 11:05

DB次第ですが、'20080820'でも'2008-08-20'と同じように認識します。


一度、使用しているDBを調べてみてはどうでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
使用しているDBは'20080820'では認識できないようです。
DB次第なのですね。違うDBを使う際のため頭に留めておきます。

お礼日時:2008/08/22 17:41

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)が発行されてしまいますし、
文字数が足りていても日付として正しいかどうかわかりませんから、
入力チェックを事前に行う必要があるでしょう。

参考URL:http://java.sun.com/javase/ja/6/docs/ja/api/inde …
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
私が初め考えていたのはこのタイプだったようです。
中途半端な知識でお恥ずかしい限りです。
入力チェックも私にとっては難関なのですが、色々試してみます。

お礼日時:2008/08/22 17:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A