Как установить ДАТУ в объекте, JSP SERVLET

У меня было это время довольно давно, и у меня закончились ресурсы для исследований.

В моем сервлете у меня есть этот код:

    comment.setDateadded(Date.valueOf(request.getParameter("date")));

Код в основном получает данные со страницы JSP, а затем устанавливается как одно из значений объекта.

Проблема в:

Когда сервлет вызывается и запускается, возвращается эта ошибка:

WARNING: StandardWrapperValve[add_comment]: PWC1406: Servlet.service() for servlet add_comment threw exception
java.lang.IllegalArgumentException
    at java.sql.Date.valueOf(Date.java:117)
    at Controller.Leader.add_comment.processRequest(add_comment.java:50)
    at Controller.Leader.add_comment.doPost(add_comment.java:96)

Что я пробовал: я больше не уверен, в чем проблема. я импортировал

import java.sql.Date; 

в сервлете или строке для работы. Я также пытался вручную ввести дату вместо автоматической установки текущей даты, но это все равно не работает. Я пробовал формат гггг/мм/дд и гггг-мм-дд, но он все равно не работает.

Тем, кто прокомментирует, большое спасибо! Если вам нужна дополнительная информация, пожалуйста, напишите.


person gwafito    schedule 25.04.2012    source источник
comment
Вы не должны использовать java.sql.Date в своих классах сервлетов. Вы должны использовать это только в своих классах DAO.   -  person BalusC    schedule 25.04.2012


Ответы (2)


Для большей части сценария вам нужно java.util.Date, а не java.sql.Date

Из документация java.sql.Date

Выдает: IllegalArgumentException - если указанная дата не находится в формате escape-последовательности даты JDBC (гггг-мм-дд)

что означает, что дата, поступающая из jsp, не имеет формат yyyy-mm-dd.

Если вы собираетесь использовать объект java.sql.Date, отформатируйте входящую дату в формате yyyy-mm-dd перед использованием valueOf API.

Для преобразования вы можете использовать SimpleDateFormat для форматирования входящего значения в yyyy-mm-dd.

Редактировать:

Еще лучше вместо использования объекта Date использовать Calendar большую часть операции.

Редактировать:

Согласно комментариям:

Предполагая, что моя дата поступления из JSP имеет формат dd-MMM-yyyy.

try {
    String date = "25-Apr-2012";
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
    java.util.Date parsedDate = dateFormat.parse(date);
    dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    date = dateFormat.format(parsedDate);
    System.out.println(date);
    java.sql.Date sqlDate = java.sql.Date.valueOf(date);
    System.out.println(sqlDate);
    } catch (ParseException e) {
       e.printStackTrace();
    }
}
person mprabhat    schedule 25.04.2012
comment
Спасибо за комментарий. Я сделал формат yyyy-mm-dd, но все еще имеет ту же ошибку. Я проверю Календарь, о котором вы говорите. Большое спасибо! Если у вас есть код для Календаря, которым вы хотите поделиться, мы будем вам очень благодарны! :) - person gwafito; 25.04.2012
comment
Какую дату вы получаете от своего jsp, можете ли вы указать точное значение? - person mprabhat; 25.04.2012

пример использования java.sql.Date

public class A
{
    public static void main(String [] args)
    {
        java.sql.Date jsqlD = java.sql.Date.valueOf( "2010-01-31" );    
        System.out.println(jsqlD);
    }
}
person Satya    schedule 25.04.2012