使用Java将当前日期和时间插入Oracle数据库

时间:2017-09-20 04:27:29

标签: java oracle datetime

我想以格式" yyyy-mm-dd hh:mm:ss"格式插入当前日期和时间。使用Java。 哪种数据类型适用于此,以及PreparedStatement需要使用哪种方法?

3 个答案:

答案 0 :(得分:2)

TL;博士

  

我需要使用哪种PreparedStatement方法

<强>存储

PreparedStatement::setObject( … , java.time.Instant myInstant )

<强>检索:

ResultSet::getObject( … , Instant.class )

java.time

现代方法使用java.time类。具体来说:PreparedStatement::setObjectResultSet::getObject

通过致电Instant.now()获取UTC中的当前时刻。

myPreparedStatement.setObject( … , Instant.now() ) ;

检索该值。

Instant instant = myResultSet.getObject( … , Instant.class ) ;

将其存储在类似于SQL标准类型TIMESTAMP WITH TIME ZONE的类型的列中。

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和&amp; SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore

答案 1 :(得分:1)

我假设该列的数据类型是数据库中的DATE。如果要插入当前日期和时间,可以使用SYSDATE中内置的oracle:

ps = conn.prepareStatement('insert into your_table(date_col, ...) values (sysdate, ...)');

或参数化它并在PreparedStatement上使用setTimestamp():

ps = conn.prepareStatement('insert into your_table (date_col, ...) values (?, ...)');
ps.setTimestamp(1, new java.sql.Timestamp(System.currentTimeMillis()));

正如@Basil在下面的评论中所建议的那样,你也可以使用java.time.Instant类:

ps.setObject(1 , Instant.now());

在检索时,请使用ResultSet#getObject(int/String, Class<T>)

Instant i = rs.getObject(1, Instant.class);

答案 2 :(得分:0)

您可以使用java.util.Date课程获取预期的日期时间格式。如果您只想存储日期,则必须将java.util.date转换为java.sql.date ..

如果要存储所有时间和日期,请转到字符串(即Oracle表中的varchar数据类型)..