Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using setDate in PreparedStatement

In order to make our code more standard, we were asked to change all the places where we hardcoded our SQL variables to prepared statements and bind the variables instead.

I am however facing a problem with the setDate().

Here is the code:

        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)); 

I get this error when the SQL gets executed:

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

Should I use setString() instead with a to_date()?

like image 699
roymustang86 Avatar asked Sep 04 '13 13:09

roymustang86


People also ask

What method on a PreparedStatement can you use to execute a select query?

As with Statement objects, to execute a PreparedStatement object, call an execute statement: executeQuery if the query returns only one ResultSet (such as a SELECT SQL statement), executeUpdate if the query does not return a ResultSet (such as an UPDATE SQL statement), or execute if the query might return more than one ...

Which methods on the PreparedStatement can be used to bind the parameters?

The setXXX() methods bind values to the parameters, where XXX represents the Java data type of the value you wish to bind to the input parameter.

Which is faster statement or PreparedStatement?

Prepared statements are much faster when you have to run the same statement multiple times, with different data. Thats because SQL will validate the query only once, whereas if you just use a statement it will validate the query each time.

What does PreparedStatement setString do?

executeQuery(); Methods of PreparedStatement: setInt(int, int): This method can be used to set integer value at the given parameter index. setString(int, string): This method can be used to set string value at the given parameter index.


1 Answers

❐ Using java.sql.Date

If your table has a column of type DATE:

  • java.lang.String

    The method java.sql.Date.valueOf(java.lang.String) received a string representing a date in the format yyyy-[m]m-[d]d. e.g.:

    ps.setDate(2, java.sql.Date.valueOf("2013-09-04")); 
  • java.util.Date

    Suppose you have a variable endDate of type java.util.Date, you make the conversion thus:

    ps.setDate(2, new java.sql.Date(endDate.getTime()); 
  • Current

    If you want to insert the current date:

    ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));  // Since Java 8 ps.setDate(2, java.sql.Date.valueOf(java.time.LocalDate.now())); 

❐ Using java.sql.Timestamp

If your table has a column of type TIMESTAMP or DATETIME:

  • java.lang.String

    The method java.sql.Timestamp.valueOf(java.lang.String) received a string representing a date 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"); 
  • java.util.Date

    Suppose you have a variable endDate of type java.util.Date, you make the conversion thus:

    ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime())); 
  • Current

    If you require the current timestamp:

    ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));  // Since Java 8 ps.setTimestamp(2, java.sql.Timestamp.from(java.time.Instant.now())); ps.setTimestamp(2, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now())); 
like image 70
Paul Vargas Avatar answered Sep 23 '22 08:09

Paul Vargas