1

I have a text box name event_date that has a "Date" content

<input style="width: 196px" id="f_date1" name="event_date"/>

How can I be able to pass the parameter for the textbox to the servlet and use it in my prepared statement. In my database the column event_date has a datatype of "date".

I know how to do it for String (shown below) but how am I gonna do it in Date...

String event_date = request.getParameter("event_date");

  try {
  event_date2 = java.util.Timestamp.parse(event_date);
  Class.forName("org.postgresql.Driver");
  connection = DriverManager.getConnection(connectionURL, "mydb", "pass");

  String sql ="insert into prodtracker (event_date) values(?)";

  PreparedStatement pst = connection.prepareStatement(sql);


  pst.setString(1, event_date2);
toink
  • 255
  • 4
  • 11
  • 30

2 Answers2

2

You can use java.text.SimpleDateFormat to parse a String into java.util.Date object. It is possible to specify different date format and locale to parse with. An example like this:

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy");
Date date = format.parse(request.getParameter("event_date"));

Then you can convert java.util.Date to java.sql.Date in order to use in PreparedStatement:

java.sql.Date sqlDate = new java.sql.Date(date.getTime());
PreparedStatement pst = connection.prepareStatement(sql);
pst.setDate(1, sqlDate);

It's better to impose some check for the data format on client side or when it has been sent to server side to make sure it conforms to certain date format before parsing it to date.

dragon66
  • 2,645
  • 2
  • 21
  • 43
  • Don't forget to add [`format.setLenient(false);`](http://docs.oracle.com/javase/6/docs/api/java/text/DateFormat.html#setLenient(boolean)) before parsing a `String` – Luiggi Mendoza Apr 28 '12 at 06:09
-2
statement.setDate(1, (java.sql.Date) m.mydate());

this worked for me

  • 1
    That will not work if `m.mydate()` doesn't actually return a `java.sql.Date`, but for example a `java.util.Date` or `java.sql.Timestamp`. – Mark Rotteveel Mar 25 '22 at 08:12