Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQL数据库(JDBC):日期类型的列只存储日期值,而不存储时间值_Java_Rest_Date_Datetime_Jdbc - Fatal编程技术网

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中的即时
您正在使用非常混乱的遗留类。而只使用java.time类

数据库各不相同 数据库的日期、时间和行为各不相同。您没有指定数据库,因此我们只能猜测或遵守

不幸的是,SQL标准很少涉及日期-时间处理。本标准简要定义了:

  • DATE
    仅作为日期值,不包含一天中的时间
  • 不带时区的时间戳是一天中的日期和时间,但缺少任何时区或UTC偏移的概念,因此它不代表实际时刻
  • 对于实际时刻,请使用带有时区的时间戳。该类型名称可能会产生误导,因为某些实现(例如)不使用值存储区域,而是使用任何传递的区域信息调整为存储值
java.time 您使用的是Java最早版本中糟糕的旧日期时间类。这些在Java8和以后的Java.time类中被取代。切勿再次使用
日期
日历

通常最好在中思考、工作、存储、记录和交换日期时间值,除非业务逻辑或用户界面特别要求。因此,一般来说,您应该关注
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.time
ZonedDateTime

如果您希望看到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中的即时
      您使用的旧类非常混乱。请仅使用java.time类

      数据库各不相同 数据库的日期、时间和行为各不相同。您不指定数据库,因此