将字符串转换为DATE(JSP)

时间:2018-07-06 15:40:25

标签: oracle date jsp

我有一个.jsp文件(java服务页面),格式为接受我需要转换为sql date数据类型的字符串日期。

//Im making a data object
Date userDate = new Date();

//THIS IS THE LINE IM GETTING AN ERROR ON
//Im trying to set the date by getting the form parameter and converting the result to a date       
userDate.setDate(TO_DATE(request.getParameter("date_updated"), "YYYY-MM-DD"));

//and save the date into my database    
ps.setDate(11,userDate);

关于我在做什么错的任何想法吗?

3 个答案:

答案 0 :(得分:1)

这是在Java中将字符串转换为util date和sql date的简单方法

    String date_updated=request.getParameter("date_updated");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//give format in which you are receiving the `String date_updated`
    java.util.Date date = sdf.parse(date_updated);
    java.sql.Date sqlDate_updated = new java.sql.Date(date.getTime());
    ps.setDate(11, sqlDate_updated); 

答案 1 :(得分:1)

您不能在Java代码中调用SQL函数。您也许应该在发送给数据库的语句中使用它,如下所示:

ps = connection.prepareStatement("update t set val = to_date(?, 'YYYY-MM-DD')");

这样,您只需在数据库中发送转换日期的文本表示即可(通过在绑定变量上设置字符串)。

或者,您可以解析日期并在语句上设置日期:

userDate = new SimpleDateFormat("yyyy-MM-dd").parse(request.getParameter("date_updated"));
//make java.sql.Date from that and then 
ps.setDate(11,userSqlDate);

答案 2 :(得分:1)

只要您至少可以使用Java 8和JDBC 4.2,就可以执行以下操作:

    // Create a date object holding the date from the form parameter
    LocalDate userDate = LocalDate.parse(request.getParameter("date_updated"));
    // Save the date into the database
    ps.setObject(11, userDate);
  

关于我在做什么错的任何想法吗?

出现错误的那一行有两个问题。

    userDate.setDate(TO_DATE(request.getParameter("date_updated"), "YYYY-MM-DD"));
  1. userDate.setDate无法正常工作。此方法最初仅用于设置一个月的日期。它在int中作为参数,范围为1到31。不建议使用该方法,这意味着您不应使用它。不建议使用它,因为它在各个时区都无法正常工作。
  2. TO_DATE似乎是一个SQL函数。您可以在SQL中使用SQL函数,而在Java中可以使用Java方法,但不能相反。 Java还有其他将字符串转换为日期的方法。

java.util.Datejava.sql.Date都已过时。我建议您不要使用它们,除非您无法避免需要其中之一的旧版API。后者的一个例子是,如果您还没有兼容JDBC 4.2的JDBC驱动程序(但我相信我们大多数人都知道)。在这种情况下,您可以先将LocalDate转换为java.sql.Date,然后再将其传递给准备好的语句,如下所示:

    ps.setDate(11, java.sql.Date.valueOf(userDate)); // pre-JDBC 4.2 way