> Java > java지도 시간 > `java.lang.IllegalArgumentException`을 피하기 위해 ReadyStatements에서 setDate()를 올바르게 사용하는 방법은 무엇입니까?

`java.lang.IllegalArgumentException`을 피하기 위해 ReadyStatements에서 setDate()를 올바르게 사용하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-10 18:43:10
원래의
719명이 탐색했습니다.

How to Correctly Use setDate() in PreparedStatements to Avoid `java.lang.IllegalArgumentException`?

PreparedStatement에서 setDate 사용

코드베이스를 표준화하기 위해 우리는 하드코딩된 SQL 변수의 모든 인스턴스를 바인딩된 변수가 있는 준비된 명령문. 그러나 setDate() 메소드에 문제가 발생했습니다.

제공된 코드 조각은 다음과 같습니다.

DateFormat dateFormatYMD = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
DateFormat dateFormatMDY = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date now = new Date();
String vDateYMD = dateFormatYMD.format(now);
String vDateMDY = dateFormatMDY.format(now);
String vDateMDYSQL = vDateMDY;
java.sql.Date date = new java.sql.Date(0000-00-00);

requestSQL = "INSERT INTO CREDIT_REQ_TITLE_ORDER (REQUEST_ID," + " ORDER_DT, FOLLOWUP_DT) " + "values(?,?,?,)";

prs = conn.prepareStatement(requestSQL);
prs.setInt(1, new Integer(requestID));
prs.setDate(2, date.valueOf(vDateMDYSQL));
prs.setDate(3, date.valueOf(sqlFollowupDT));
로그인 후 복사

SQL 쿼리를 실행하면 다음 오류가 발생합니다. 발생:

java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:138)
at com.cmsi.eValuate.TAF.TAFModuleMain.CallTAF(TAFModuleMain.java:1211)
로그인 후 복사

해결책

setDate() 메서드에는 유효한 날짜 값이 필요합니다. 이 경우 유효하지 않은 날짜인 new java.sql.Date(0000-00-00)로 설정했습니다.

이 문제를 해결하려면 다음 솔루션을 고려할 수 있습니다.

java.sql.Date 사용

테이블 열에 DATE가 있는 경우 유형에 따라 다음 옵션을 사용할 수 있습니다.

  • java.lang.String: java.sql.Date.valueOf(java.lang.String)을 사용하여 구문 분석합니다. yyyy-[m]m-[d]d 형식의 날짜 문자열, 예:

    ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
    로그인 후 복사
  • java.util.Date: 새로운 java.sql.Date(endDate.getTime()을 사용하여 java.util.Date 객체를 변환합니다. ), 예:

    ps.setDate(2, new java.sql.Date(endDate.getTime()));
    로그인 후 복사
  • 현재: 현재 날짜를 삽입하려면 new java.sql.Date(System.currentTimeMillis())를 사용하거나 java.sql.Date.valueOf를 사용하세요. (java.time.LocalDate.now())(Java 8 및

java.sql.Timestamp

사용

테이블 열에 TIMESTAMP 또는 DATETIME 유형이 있는 경우 다음 옵션은 다음과 같습니다. 사용 가능:

  • java.lang.String: java.sql.Timestamp.valueOf(java.lang.String)을 사용하여 yyyy 형식의 날짜 문자열을 구문 분석합니다. -[m]m-[d]d hh:mm:ss[.f…], 예:

    ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
    로그인 후 복사
  • java.util.Date: 새로운 java.sql.Timestamp(endDate.getTime()를 사용하여 java.util.Date 객체를 변환합니다. ), 예:

    ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
    로그인 후 복사
  • 현재: 새로운 java.sql.Timestamp(System.currentTimeMillis()), java.sql.Timestamp.from(java.time.Instant) 사용 .now()) 또는 java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()) 현재 타임스탬프를 삽입하려면 Java 8 이상을 사용하세요.

위 내용은 `java.lang.IllegalArgumentException`을 피하기 위해 ReadyStatements에서 setDate()를 올바르게 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿