簡體   English   中英

如何從html表單獲取日期到servlet

[英]How to get date from html form to servlet

我有一個HTML表單,我有一個日期和時間選擇器。 我想要做的是通過servlet中的request.getParameter獲取日期和時間,然后將其插入到我的數據庫中。 如何以日期和時間格式獲取日期和時間,或者將它們作為字符串然后解析它們。

碼:

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

我在谷歌上發現了這個以獲取日期和時間,但它在以下情況下拋出錯誤:

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

但上面的行是投擲錯誤,我想我錯過了什么或寫錯了

您有兩個不同的Date對象(util.Date和sql.Date),因此您需要從util.Date轉換為sql.Date以使用setDate方法。

這篇文章的解釋

您的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 
}

但我建議你使用java.time類而不是舊的java.util.Datejava.sql.Date與JDBC 4.2或更高版本。 請參閱了解詳情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM