0

次のコードを含むプログラムがあります。

XXX.java で、SVC_APPR_DT_IN_MILLIS に、String.valueOf(date.getTime())ストロング テキストを使用して Oracle データベースのレコードから取得した日付値を設定しました。文字列として保存されます。

private void setApprovalDateProperty(Date date) {
    setAdditionalProperty(SVC_APPR_DT_IN_MILLIS, String.valueOf(date.getTime()));
}

YYY.java では、 new Date(Long.valueOf())を使用して Date を返します。

private Date getApprovalDate() throws ParseException {
    String approvalDateInMillis = this.record
        .getAdditionalProperty(XXX.SVC_APPR_DT_IN_MILLIS);
    return new Date(Long.valueOf(approvalDateInMillis));
}

レコードの 1 つについて、 「04/12/2012 14:44:38」がデータベース内のレコードの日付である場合、以下のエラーがスローされます。

For input string: "04/12/2012 14:44"
java.lang.NumberFormatException: For input string: "04/12/2012 14:44"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Long.parseLong(Long.java:412)
    at java.lang.Long.valueOf(Long.java:518)
    at YYY.getApprovalDate(YYY.java:634)

データベースを確認しましたが、データベース内の多くのレコードは問題なく処理できますが、これは例外です。このエラーの考えられる原因を教えてください。問題をシミュレートしたいのですが、再現する方法がわかりません。誰にも提案はありますか?

4

1 に答える 1

0

データベース内のレコードの 1 つに誤ったバージョンが挿入されているか、データベースが破損しているようです。

Long.valueOf を呼び出す前に、 approvalDateInMillis の値を確認しましたか?

たとえば、追加できます

if (!approvalDateInMillis.matches("^[0-9+]$"))
  throw new Error(
    String.format("Invalid approvalDateInMillis format: '%s'", approvalDateInMillis));

return ステートメントの前に戻り、デバッグを続行して、実際にデータベースにあるものを確認します。

于 2012-12-06T11:22:01.627 に答える