我想以格式" yyyy-mm-dd hh:mm:ss"格式插入当前日期和时间。使用Java。
哪种数据类型适用于此,以及PreparedStatement
需要使用哪种方法?
答案 0 :(得分:2)
我需要使用哪种PreparedStatement方法
<强>存储强>
PreparedStatement::setObject( … , java.time.Instant myInstant )
<强>检索:强>
ResultSet::getObject( … , Instant.class )
现代方法使用java.time类。具体来说:PreparedStatement::setObject
和ResultSet::getObject
通过致电Instant.now()
获取UTC中的当前时刻。
myPreparedStatement.setObject( … , Instant.now() ) ;
检索该值。
Instant instant = myResultSet.getObject( … , Instant.class ) ;
将其存储在类似于SQL标准类型TIMESTAMP WITH TIME ZONE
的类型的列中。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 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数据类型)..