1

私がしたいこと ?

変数 dob を持つクラスCustomersがあります // 生年月日

Java Swing Text Field を使用してユーザーから入力を取得しようとしています。

それを Java 日付に変換してから、java.sql.Date に変換して、MySQL データベースに保存できるようにします。

Customer クラスのセッターメソッドです

public  void setDOB(java.sql.Date dob)
{
    DateOfBirth = dob;
}   

これが私のSwingクラス(Application Window Loader)のコードです

//Date
            if(textField_5.getText().isEmpty())
                lblerr.setVisible(true);
            else
            {
                try {
                    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
                    Date dob = null;
                    dob = sdf.parse(textField_5.getText());
                    java.sql.Date sqlDate = new java.sql.Date(dob.getTime());
                    c1.setDOB(sqlDate);

                } catch (ParseException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                allinfoisentered = true;
            }   

textField_5 - ユーザーが日付を入力するフィールドです。

次のさまざまな入力を使用してアプリをテストしました。

  1. 1993 年 12 月 12 日
  2. 1970 年 10 月 5 日

問題は次のとおりです。MySQL テーブルに格納される値は 1992 年 12 月 27 日です。これがデフォルトの日付であると強く感じています。

知りたいのですが、文字列を日付に解析してからMySQLテーブルに送信するにはどうすればよいですか。

4

1 に答える 1

2

(コメントで議論されているように...)

2 つの問題があります。

  • 解析形式が正しくありません。「YYYY」ではなく「yyyy」を使用する必要があります
  • さらに重要なこと (IMO) のエラー処理が正しくありません。このcatchブロックを使用しています:

    catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    ...つまり、解析が失敗した場合でも、設定されていない日付を除くすべてのデータが挿入されます。とにかくログファイルから情報を取得できたはずですが、おそらくログを記録System.errしていないか、ログを見ていませんでした。

エラー処理は非常に重要です。データの解析中に例外が発生した場合、レコードをまったく挿入したくないと思います-代わりに、エラーをスタックに伝播し、メモを取ることを強制し、情報を失わないようにする必要があります。したがって、おそらく代わりに次のようなものが必要でした。

catch (ParseException e) {
    throw new DataValidationException(
        "Error parsing date: " + textField_5.getText(), e);
}

(DataValidationExceptionはただの例外です。アプリで何を一貫して使用するかを検討する必要があります。)

エラーが発生した場合、次の 2 つのことが非常に重要になります。

  • その時に適切に対処する必要があります。多くの場合、これは現在の操作を中止することを意味しますが、場合によっては再試行したり、重要でない情報なしで続行したりできます。
  • 後でエラーを理解できるように、十分な情報を取得する必要があります。
于 2012-11-15T07:17:27.343 に答える