如何从html表单获取日期到servlet

时间:2019-04-01 07:16:19

标签: java servlets

我有一个HTML表单,其中有一个日期和一个时间选择器。我想做的是通过request.getParameter在servlet中获取日期和时间,然后将其插入到我的数据库中。如何以日期和时间格式获取该日期和时间,或者如何将其获取为字符串然后解析它们。

代码:

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

我在Google上发现此日期和时间,但是它的抛出错误位于:

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

错误是:

  

PreparedStatement类型的setDate(int,java.sql.Date)方法不适用于参数(int,java.util.Date)

修改

我正在这样做

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

但是以上几行引发错误,我想我缺少了一些东西或写了一些错误的东西

2 个答案:

答案 0 :(得分:0)

您有两个不同的Date对象(util.Date和sql.Date),因此您需要从util.Date转换为sql.Date才能使用setDate方法。

Explanation in this post

答案 1 :(得分:0)

您的java.util.Date selectedDatejava.util.Date类型,而PreparedStatement的setDate(int, java.sql.Date)方法要求是java.sql.Date类型。因此,将您的java.util.Date转换为java.sql.Date

您可以添加以下行:

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

所以您的代码将是:

        // 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 
}

但是我建议您在JDBC 4.2或更高版本中使用java.time类,而不要使用旧版java.util.Datejava.sql.Date。有关详细信息,请参见this