Java SQL数据库(JDBC):日期类型的列只存储日期值,而不存储时间值
我有一个这样的数据库,Java SQL数据库(JDBC):日期类型的列只存储日期值,而不存储时间值,java,rest,date,datetime,jdbc,Java,Rest,Date,Datetime,Jdbc,我有一个这样的数据库,lastdedited是一个date字段 我使用“来自数据库的RESTfulWeb服务”将该数据库连接到JavaWeb应用程序 这会自动为我的ThreadChat列生成一个名为ThreadChat的类。这里给出的是上次编辑部分的getter和setter lastEdited是一个java.util.Date对象 public Date getLastedited() { return lastedited; } public void setLastedite
lastdedited
是一个date
字段
我使用“来自数据库的RESTfulWeb服务”将该数据库连接到JavaWeb应用程序
这会自动为我的ThreadChat
列生成一个名为ThreadChat的类。这里给出的是上次编辑部分的getter和setter
lastEdited是一个java.util.Date对象
public Date getLastedited() {
return lastedited;
}
public void setLastedited(Date lastedited) {
this.lastedited = lastedited;
}
ThreadChat thread = new ThreadChat(threadName, new Date(), loginIdInt);
threadChatFacadeREST.create(thread);
在这里,我创建了一个新的ThreadChat对象,并将数据添加到数据库中。lastEdited的参数是java.util.Date对象
public Date getLastedited() {
return lastedited;
}
public void setLastedited(Date lastedited) {
this.lastedited = lastedited;
}
ThreadChat thread = new ThreadChat(threadName, new Date(), loginIdInt);
threadChatFacadeREST.create(thread);
这将像这样更新表
此方法返回THREADCHAT表中的所有记录
List<ThreadChat> list = getAllThreads();
如何在JDBC数据库中存储日期+时间并检索两者?您正在寻找数据类型的时间戳。如果可以,您应该更改数据库。您正在查找数据类型的时间戳。如果可以,您应该更改数据库。数据库中的字段类型为
日期
,因此日期
仅存储YYYY-MM-DD
如果还要存储时间,则必须将数据库中字段的类型更改为DATETIME
。其表示形式为:YYYY-MM-DD HH:MI:SS
更多信息请参见:数据库中字段的类型为
DATE
,因此DATE
仅存储YYYY-MM-DD
如果还要存储时间,则必须将数据库中字段的类型更改为DATETIME
。其表示形式为:YYYY-MM-DD HH:MI:SS
更多信息请访问:tl;博士
您使用的日期仅用于保存日期时间值——试图适应时间
如何在JDBC数据库中存储日期+时间并检索两者
要存储时刻、日期时间值,请使用日期时间类型:
- 数据库中带有时区的时间戳
- Java中的即时李>
仅作为日期值,不包含一天中的时间李>DATE
- 不带时区的时间戳是一天中的日期和时间,但缺少任何时区或UTC偏移的概念,因此它不代表实际时刻李>
- 对于实际时刻,请使用带有时区的时间戳。该类型名称可能会产生误导,因为某些实现(例如)不使用值存储区域,而是使用任何传递的区域信息调整为存储值
日期
或日历
通常最好在中思考、工作、存储、记录和交换日期时间值,除非业务逻辑或用户界面特别要求。因此,一般来说,您应该关注Instant
类。该类表示时间线上的一个时刻,分辨率为(小数点的九(9)位)。此类将替换java.util.Date
捕捉当前时刻
将此Instant
存储在SQL标准类型带有时区的时间戳的数据库列中
或与特定数据库中类似的任何内容
myPreparedStatement.setObject( … , instant ) ;
JDBC4.2
从JDBC4.2及更高版本开始,您可以直接与数据库交换java.time对象
myPreparedStatement.setObject( … , instant ) ;
检索
Instant instant = myResultSet.getObject( … , Instant.class ) ;
转换
如果收到过时的文件,立即通过过时类转换为java.timeZonedDateTime
如果您希望看到UTC中的同一时刻,而不是该特定地区(时区)的人们使用的挂钟时间,请提取一个瞬间
Instant instant = zdt.toInstant() ; // Adjust from zoned moment to UTC. Same moment, same point on the timeline, different wall-clock time.
如果必须与尚未更新为java.time的旧代码进行交互操作,则可以来回转换。提示:尽量保持在java.time内。遗留类是一堆糟糕的设计
java.util.Date myJavaUtilDate = java.util.Date.from( instant ) ;
然后,往另一个方向走
Instant instant = myJavaUtilDate.toInstant() ;
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(tl;dr
您使用的日期仅用于保存日期时间值——试图适应时间
如何在JDBC数据库中存储日期+时间并检索两者
要存储时刻、日期时间值,请使用日期时间类型:
- 数据库中带有时区的时间戳
- Java中的即时