【问题标题】:datetime in sql changes to just date in my applicationsql中的日期时间更改为我的应用程序中的日期
【发布时间】:2013-05-08 12:21:35
【问题描述】:

我的表中有一个类型为 datetime 的列,我正在使用 jdbc 将该列检索到我的 java 应用程序。

我的问题是当我将2014-05-13 23:49:18.150 存储在我的数据库中时,它在我的java 应用程序中变成了2014-04-13

如何获取包括时间在内的所有日期(房屋、秒、分钟)。

java代码

callableStatement = con
                    .prepareCall("{call getStatusForOrder(?,?,?,?,?)}");
            callableStatement.setInt(1, order.getID());
            callableStatement.registerOutParameter(2, java.sql.Types.INTEGER);
            callableStatement.registerOutParameter(3, java.sql.Types.DATE);
            callableStatement.registerOutParameter(4, java.sql.Types.DATE);
            callableStatement.registerOutParameter(5, java.sql.Types.BIT);
            callableStatement.execute();
            int statusID = callableStatement.getInt(2);
            Date startTime = callableStatement.getDate(3);
            Date endTime = callableStatement.getDate(4);
            boolean isActive = callableStatement.getBoolean(5);
            System.out.println("IsActive = " + isActive);
            System.out.println("Start Date = " + startTime.toString());

【问题讨论】:

  • DB 函数 getStatusForOrder 是否在做一些转换?
  • @sanbhat 不,不是
  • 你的意思是肯定会变成2014-05-13?
  • @Will 什么?我没听懂你
  • @MarcoDinatsoli “我的问题是,当我将 2014-05-13 23:49:18.150 存储在我的数据库中时,它在我的 java 应用程序中变成了 2014-04-13。”错别字?

标签: java sql-server date datetime jdbc


【解决方案1】:

使用Timestamp 代替Datedatetimedatetime2 都映射到java.sql.Timestamp

请参阅documentation

附言。不要忘记使用callableStatement.getTimestamp 而不是callableStatement.getDate

http://docs.oracle.com/javase/6/docs/api/java/sql/CallableStatement.html#getTimestamp(int)

【讨论】:

  • 所以你的意思是我必须将我的表更改为timestamp,然后将我的 java 对象更改为时间戳?
  • 不,我的意思是你 registerOutParameter(3, java.sql.Types.DATE);改用 java.sql.Types.Timestamp,并使用 callableStatement.getTimestamp 读取这些
  • bty,我是否也应该将存储过程中的变量从日期时间更改为时间戳?
  • 是的,我会使用时间戳。
【解决方案2】:

使用DateFormat 来显示它。

  • SHORT 完全是数字,例如 12.13.52 或 3:30pm
  • MEDIUM 较长,如 1952 年 1 月 12 日
  • LONG 更长,例如 1952 年 1 月 12 日或下午 3:30:32
  • FULL 非常完整,例如公元 1952 年 4 月 12 日星期二或太平洋标准时间下午 3:30:42。

【讨论】:

  • a java.sql.Date 从来没有(或不应该有)时间部分。
【解决方案3】:

我认为您必须使用 Timestamp(如果我没记错的话,有一段时间没有编程 Java)而不是 Date

【讨论】:

    【解决方案4】:

    Types.DATE 表示只有日期组件而没有时间的 JDBC(和 SQL)数据类型。如果要包含时间部分,则需要使用 Types.TIMESTAMP 和关联的 get/setTimestamp(..) 方法和类 java.sql.Timestamp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 2016-06-08
      • 1970-01-01
      相关资源
      最近更新 更多