简体   繁体   中英

How to get date from html form to servlet

I have an HTML form where I have a date and a time picker. What I am trying to do is get the date and time by request.getParameter in servlet, then insert it into my database. How can I get that date and time in date and time format or get them as a string then parse them.

Code:

String[] quantity = request.getParameterValues("Quantity_field");
     java.util.Date selectedDate = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("deliveryDate")); //using this one i am trying to get date but it is showing error
    java.util.Date selectedTime = new SimpleDateFormat("hh:mm:ss").parse(request.getParameter("deliveryTime")); 
    System.out.println(selectedDate);
    java.util.Date dateUtil = new Date();
    java.sql.Date dateSql = new java.sql.Date(dateUtil.getTime());
    java.sql.Timestamp timestamp = new Timestamp(dateUtil.getTime());


    try {
        con = DBConnection.createConnection();
        statement = con.createStatement();
        String query = " insert query  VALUES   (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = con.prepareStatement(query);
        for (int i = 0; i < quantity.length; i++) {
            if (Double.parseDouble(quantity[i]) != 0) {
                if(recorderNo!=0)
                {
                    ps.setInt(1, recorderNo);
                }
                else
                {
                    ps.setInt(1, 1);
                }

                ps.setDate(2, dateSql);
                ps.setString(3, 77);
                ps.setDouble(4, 55);
                ps.setInt(5, 0);
                ps.setInt(6, 0);
                ps.setDouble(7, Double.parseDouble(quantity[i]));
                ps.setInt(8, 0);
                ps.setInt(9, 0);
                ps.setInt(10, 0);
                ps.setString(11, outlet);
                ps.setTimestamp(12, timestamp);
                 ps.setDate(13,selectedDate); // here i am trying to put date
                ps.setTime(14,selectedTime);// and here time
                ps.addBatch();
            }
        }
        ps.executeBatch();

I found this on Google to get date and time but its throwing error at:

ps.setDate(13,selectedDate);
ps.setTime(14,selectedTime);

The error is:

The method setDate(int, java.sql.Date) in the type PreparedStatement is not applicable for the arguments (int, java.util.Date)

Edit

i am doing like this

java.util.Date selectedDate = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("deliveryDate")); 
    java.util.Date selectedTime = new SimpleDateFormat("hh:mm:ss").parse(request.getParameter("deliveryTime"));
    java.sql.Date dateSelected = new java.sql.Date(selectedDate.getTime());     
    java.sql.Time dateTime=new Time(selectedTime.getTime());

but the above lines are throwing error, i think i am missing something or writing something wrong

You have two different Date objects (util.Date and sql.Date), so you need to convert from util.Date to sql.Date to use setDate method.

Explanation in this post

Your java.util.Date selectedDate is of java.util.Date type while PreparedStatement's setDate(int, java.sql.Date) method requires a java.sql.Date type. So convert your java.util.Date into java.sql.Date

You can add this lines:

java.util.Date selectedDate = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("deliveryDate")); 
java.util.Date selectedTime = new SimpleDateFormat("hh:mm:ss").parse(request.getParameter("deliveryTime")); 
// Add the lines below
java.sql.Date selectedSQLDate =  new java.sql.Date(selectedDate.getTime());
java.sql.Time selectedSQLTime =  new java.sql.Time(selectedTime.getTime());

So your code will be:

        // Other codes
 try { 
        String[] quantity = request.getParameterValues("Quantity_field");
        java.util.Date selectedDate = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("deliveryDate")); 
        java.util.Date selectedTime = new SimpleDateFormat("hh:mm:ss").parse(request.getParameter("deliveryTime")); 
        // Add the lines below
        java.sql.Date selectedSQLDate =  new java.sql.Date(selectedDate.getTime());
        java.sql.Time selectedSQLTime =  new java.sql.Time(selectedTime.getTime());
        con = DBConnection.createConnection();
        statement = con.createStatement();
        String query = " insert query  VALUES   (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement ps = con.prepareStatement(query);
        for (int i = 0; i < quantity.length; i++) {
            if (Double.parseDouble(quantity[i]) != 0) {
                if(recorderNo!=0)
                {
                    ps.setInt(1, recorderNo);
                }
                else
                {
                    ps.setInt(1, 1);
                }

                ps.setDate(2, dateSql);
                ps.setString(3, 77);
                ps.setDouble(4, 55);
                ps.setInt(5, 0);
                ps.setInt(6, 0);
                ps.setDouble(7, Double.parseDouble(quantity[i]));
                ps.setInt(8, 0);
                ps.setInt(9, 0);
                ps.setInt(10, 0);
                ps.setString(11, outlet);
                ps.setTimestamp(12, timestamp);
                ps.setDate(13,selectedDate); // here i am trying to put date
                ps.setTime(14,selectedTime);// and here time
                ps.addBatch();
            }
        }
        ps.executeBatch();
        // Other codes

} catch (Exception e){
       // TODO Auto-generated catch block 
}

But I suggest you use java.time classes instead of legacy java.util.Date & java.sql.Date with JDBC 4.2 or later. Refer to this for details.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM