我有一个.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);
关于我在做什么错的任何想法吗?
答案 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"));
userDate.setDate
无法正常工作。此方法最初仅用于设置一个月的日期。它在int
中作为参数,范围为1到31。不建议使用该方法,这意味着您不应使用它。不建议使用它,因为它在各个时区都无法正常工作。TO_DATE
似乎是一个SQL函数。您可以在SQL中使用SQL函数,而在Java中可以使用Java方法,但不能相反。 Java还有其他将字符串转换为日期的方法。 java.util.Date
和java.sql.Date
都已过时。我建议您不要使用它们,除非您无法避免需要其中之一的旧版API。后者的一个例子是,如果您还没有兼容JDBC 4.2的JDBC驱动程序(但我相信我们大多数人都知道)。在这种情况下,您可以先将LocalDate
转换为java.sql.Date
,然后再将其传递给准备好的语句,如下所示:
ps.setDate(11, java.sql.Date.valueOf(userDate)); // pre-JDBC 4.2 way