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

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

Barbara Streisand
Release: 2024-12-10 18:43:10
Original
748 people have browsed it

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

Using setDate in PreparedStatement

In order to standardize our codebase, we have been tasked with transitioning all instances of hardcoded SQL variables to prepared statements with bound variables. However, we have encountered an issue with the setDate() method.

The code snippet provided is as follows:

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));
Copy after login

Upon executing the SQL query, the following error is encountered:

java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:138)
at com.cmsi.eValuate.TAF.TAFModuleMain.CallTAF(TAFModuleMain.java:1211)
Copy after login

Solution

The setDate() method requires a valid date value. In this case, we have set it to new java.sql.Date(0000-00-00), which is an invalid date.

To resolve this issue, the following solutions can be considered:

Using java.sql.Date

If the table column has a DATE type, the following options are available:

  • java.lang.String: Use java.sql.Date.valueOf(java.lang.String) to parse the date string in the format yyyy-[m]m-[d]d, e.g.:

    ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
    Copy after login
  • java.util.Date: Convert the java.util.Date object using new java.sql.Date(endDate.getTime()), e.g.:

    ps.setDate(2, new java.sql.Date(endDate.getTime()));
    Copy after login
  • Current: Use new java.sql.Date(System.currentTimeMillis()) to insert the current date, or java.sql.Date.valueOf(java.time.LocalDate.now()) in Java 8 and above.

Using java.sql.Timestamp

If the table column has a TIMESTAMP or DATETIME type, the following options are available:

  • java.lang.String: Use java.sql.Timestamp.valueOf(java.lang.String) to parse the date string in the format yyyy-[m]m-[d]d hh:mm:ss[.f…], e.g.:

    ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
    Copy after login
  • java.util.Date: Convert the java.util.Date object using new java.sql.Timestamp(endDate.getTime()), e.g.:

    ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
    Copy after login
  • Current: Use new java.sql.Timestamp(System.currentTimeMillis()), java.sql.Timestamp.from(java.time.Instant.now()), or java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()) in Java 8 and above to insert the current timestamp.

The above is the detailed content of How to Correctly Use setDate() in PreparedStatements to Avoid `java.lang.IllegalArgumentException`?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template