更新/检索/插入日期字段

时间:2010-08-08 06:11:46

标签: java oracle jdbc

将日期字段更新到数据库时遇到困难。 DB中的字段类型是日期/时间。

现在,我正在尝试更新字段名称“R_Date”。

目前,我在我的jsp中使用SQL Expression“ UPDATE request SET request_date ='"+Request_Date+"'";,但它不接受。

在select语句中我使用的是普通选择,我尝试使用to_char或to_date,但它不接受“DD-MMM-YYYY”的格式

那么,您可以帮助我以“DD-MMM-YYYY”的格式在日期字段中检索/更新/插入日期字段吗?

3 个答案:

答案 0 :(得分:2)

在DB中存储时间戳的常规做法(因此,Java端为java.util.Date,JDBC端为java.sql.Timestamp)是使用PreparedStatement#setTimestamp()

Date requestDate = getItSomehow();
Timestamp timestamp = new Timestamp(requestDate.getTime());
preparedStatement = connection.prepareStatement("UPDATE request SET request_date = ?");
preparedStatement.setTimestamp(1, timestamp);

从数据库获取时间戳的常规做法是使用ResultSet#getTimestamp()

Timestamp timestamp = resultSet.getTimestamp("request_date");
Date requestDate = timestamp; // You can just upcast.

要在java.util.Datejava.lang.String之间进行转换,您通常会使用SimpleDateFormat

// Convert from String to Date.
String requestDateAsString = "09-Aug-2010";
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
Date requestDate = sdf.parse(requestDateAsString);

// Convert from Date to String.
String anotherDateAsString = sdf.format(someDate);

另见:

答案 1 :(得分:1)

我认为你应该使用MON代替MMM。

你有没有试过像:

UPDATE request
SET request_date = to_date('" + Request_Date + "', 'DD-MON-YYYY')

希望你意识到,当你的陈述成立时(如果它有效),它会更新请求表中的每一行(不确定这是否是你的意图,但我认为我会指出它。)

答案 2 :(得分:0)

您需要检查要插入的日期格式,并尝试使用适当格式的to_date方法。

以下内容来自:http://infolab.stanford.edu/~ullman/fcdb/oracle/or-time.html

Oracle DATE的默认格式是“DD-MON-YY”。 如果要以特定格式检索日期,则需要使用:

    TO_CHAR(<date>, '<format>')

同样,如果你需要插入/更新日期而不是标准格式的日期输入,你需要使用:

TO_DATE(<string>, '<format>')

其中<format>字符串可以由40多个选项组成。一些比较流行的包括:

    MM  Numeric month (e.g., 07)
    MON Abbreviated month name (e.g., JUL)
    MONTH   Full month name (e.g., JULY)
    DD  Day of month (e.g., 24)
    DY  Abbreviated name of day (e.g., FRI)
    YYYY    4-digit year (e.g., 1998)
    YY  Last 2 digits of the year (e.g., 98)
    RR  Like YY, but the two digits are ``rounded'' to a year in the range 1950 to 2049. Thus, 06 is considered 2006 instead of 1906
    AM (or PM)  Meridian indicator
    HH  Hour of day (1-12)
    HH24    Hour of day (0-23)
    MI  Minute (0-59)
    SS  Second (0-59)