• ベストアンサー

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+…とやるのでしょうか? よろしくお願いいたします。

  • Java
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • Kilm
  • ベストアンサー率87% (7/8)
回答No.3

日付の変換には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が殆どなので そちらを使うのも宜しいと思います。

mogu33mogu
質問者

お礼

回答ありがとうございました! SimpleDataFormatでこんな簡単にフォーマットが変えられるとは。 更に初歩的な質問で申し訳ないのですが、フォームから入力した日付 (20080820)を「?」で受け取りそれを変換するということですよね。 そのあとにPreparedStatementに値をセットしていざsql実行だと思うのですが、 >String str1 = "20080820"; の"20080820"の部分は「?」からどう受けたらよいのでしょうか? すみません、よろしくお願いいたします。 ============================================== sql = "insert into テーブル名 values (?)"; ~(コネクション取得)~   **この部分で変換作業** stmt = dbConn.preparedStatement(sql);  stmt.setString(1,変換済の日付); stmt.executeUpdate(); //実行 …… =============================================

その他の回答 (3)

  • Kilm
  • ベストアンサー率87% (7/8)
回答No.4

今回の場合、str1の文字列日付を変換し、 str2に変換後の文字列日付が格納されるので。 stmt.setString(1,str2); で大丈夫だと思います。

mogu33mogu
質問者

お礼

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

  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.2

DB次第ですが、'20080820'でも'2008-08-20'と同じように認識します。 一度、使用しているDBを調べてみてはどうでしょう。

mogu33mogu
質問者

お礼

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

  • osumitan
  • ベストアンサー率33% (102/307)
回答No.1

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/index.html
mogu33mogu
質問者

お礼

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

関連するQ&A

  • JDBCでのinsertについて

    JDBCを使ってDBを扱います。 データベースはPostgresqlです。 Servlet+JSP+Beanで開発しているのですが、 以下のようなinsert処理をBeanで行っています。 String sql_insert = "INSERT INTO tal_ks(cd,kbn)" + " VALUES(" + vl1 + ",'" + vl2 + "')";System.out.println(sql_insert); System.out.println("SQL文発行"); int in = stmt.executeUpdate(sql_insert); System.out.println("(SQL文発行後"); ・ ・ ・ これを行うと、例外処理には流れず 実行したかのように見えるんですが、 実際はデータがはいっておりません。 このSQLと同じものをpsqlで直接実行すると insert できました。 これは、どういうことが原因なのでしょうか? 教えていただきたいです。

    • ベストアンサー
    • Java
  • 日付入力

    エクセルの日付入力について。 例えば 09/04/24と入力すると H21.04.24と変換になりますが、 /(スラッシュ)や-(ハイフン)の代わりに.(ドット)で入力したいです。 スラッシュ(/)ハイフン(-)の位置が遠く、 入力速度を上げるため ドット(.)で入力したいのです。 宜しくお願いします。   

  • 日付を入力するには?

    PHP+SQLサーバ2003でWEB作成をしています。 PHPでPOSTされた年月日をSQLサーバのカラム(smalldate型)に格納したいのですが、入力された通りにはDBに日付が格納されないのです。 例)2007/10/10 → (DB)1905/06/14 ソースはこんな感じです。 //年、月、日と入力された値を"年/月/日" の形にする $day = implode("/",array($_POST["year"],$_POST["month"],$_POST["day"])); //入力された日付をDBに格納する。 $sql = "insert into table_name(date) values($day)"; 根本的に何かが間違っていると思われるのですが、よくわかりません。 どなたかアドバイスお願いします。

  • JSPが表示できない

    サーブレットからJSPに表示させようとしているのですがJSPの中にJAVAソース を加えると表示できなく画面が真っ白になり、加えなければ表示できます。 原因がなぜなのかわからなく困惑中です。ソースは以下の通りです。 アドバイスお願いします。 <%@ page contentType="text/html;charset=Shift_JIS"                               import= "java.sql.*" %> <jsp:useBean id="Bean" class="Servlet"scope="session" /> <html> <head><title>表示画面</title></head> <body> // BeanファイルでデータをSQL文によって取り出しrs変数に格納し // getNameCDメソッドによってデータを取り出す。BeanファイルではSQL文 実行確認済み <% ResultSet rs = Bean.getNamaCD(); %> <%  while(rs.next()){ out.println(rs.getString(1)); // 名前のコードを取り出し表示させる。 } %> </body> </html>

  • jspで作った入力フォーム内容をJavaで受け取る方法

    こんばんは。 教えていただきたいことがあります。 現在JSPで入力フォームをつくりました。 私はここに入れられた情報に対して、決定ボタンを押すとSQLで データベースに挿入されるJavaプログラムを作ろうと思っています。色々と調べてもまったく分からなかったので皆様のお知恵を拝借させていただけませんでしょうか? よろしくおねがいいたします。

  • Accessへ日付をINSERT

    今Access2000のテーブルから文字として受け取ったデータを 同じくAccessの別テーブルの日付型にINSERTしようとしています。 ソフトはVC6.0を使用しています。 受け取るSELECTはうまくできています。 UCHAR sqlstr [ ] ="INSERT INTO テーブル名"           "(カラム1、カラム2、カラム3)"           "VALUES(?,?,?)"; INSERTはこのようにSQL文を用意しておいてSQLExecuteで SQL文を実行しようとしています。 この場合にカラム1が日付型だとしたら、 「?」のパラメータには文字として渡し、 SQL文のなかで "VALUES(to_date(?,'YYYYMMDD'),?,?)"; とすればうまくいくと思ったのですができません。 いろいろサイトを見るとAccessでは「’」ではなく「#」を使うと 書いてあったので to_date(?,#YYYYMMDD#) とやったのですがエラーになってしまいます。 ちなみにパラメータとして渡す文字列は「20020413」という 8桁の普通の文字です。 どなたか知っている方いませんでしょうか? 他に方法があればそれでも構いません。 どうか教えてください。m(__)m どうしても先へ進めません…。

  • 入力値と外部キーをINSERTするには

    追加したいカラムが3つあるとしまして、そのうち2つはフォームからの入力値で、残り1つは別テーブルのIDをWHEREで引っ張ってきてINSERTしたい場合、INSERT...VALUES()とINSERT...SELECT構文を組み合わせないとダメかと思うのですが、組み合わせるとうまくいきません。2つの文に分けるしかないのでしょうか? やりたいことは下の感じのSQLです。が、解釈してくれません。 INSERT INTO room(A, B, C) VALUES (1, 2, SELECT other_table.id FROM other_table WHERE other_table.id = 1");

    • ベストアンサー
    • MySQL
  • 「システム日付」を挿入する

    フィールドに「システム日付」を挿入するSQLを作成する方法が分かりません。 GETDATE()という関数を使えばいいらしいですが、どのようにすれば良いでしょうか? INSERT文を使ってdatetime型の値が入る列に挿入するという形式です。

  • サーブレットとJSPの連携

    今、サーブレットとJSPについて勉強しまいます。 HTMLからサーブレットでリクエストを受け付け、 JSPに転送し表示させたいのですが、フォームからの入力の場合は String carname = request.getParameter("cars"); で入力データを取得するコードを書きますよね? (本ではこう書いてました・・・。) では、HTMLの入力フォームからではなくリンクからの 受付けの場合はどう書けばいいのですか? 勉強を始めたばかりで初心者なので、説明不足の点もあるかも 知れませんが分かりやすくご指導宜しくお願いします…。

  • [ADO.NET]Accessの日付型にデータをInsertするには?

    言語はVB.NETでDBはAccess2003、OleDbで接続をしています。 テーブルに日付型のフィールドがあるのですが、 SQL文でInsertしようとすると、 System.Data.OleDb.OleDbException: 更新可能なクエリであることが必要です。 という例外がスローされます。 SQL文としては、 INSERT INTO TEST_TABLE (name,updatetime) VALUES ('テスト',DateValue('2006/12/11 18:00:00')); というような構文になっています。 初歩的な不明点ですが、ご教授お願いします。

専門家に質問してみよう