【问题标题】:Entering a Date value in Postgresql with Java使用 Java 在 Postgresql 中输入日期值
【发布时间】:2011-10-05 14:08:50
【问题描述】:

我正在尝试使用 java 和 PostgreSQL 编写数据库应用程序。我有一些日期数据类型的行。但我无法使用此代码向数据库添加任何条目:

Date aDate = null;
aDate.setYear(1990);
aDate.setDate(01);
aDate.setMonth(05);

preparedStatement prep = connection.prepareStatement("insert 
into exampletable values (?,?);");
prep.setDate(1, (java.sql.Date) aDate);
prep.setDate(2, (java.sql.Date) aDate);

如何在带有 java 查询的 postgreSQL 行中添加日期?

【问题讨论】:

  • java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API。查看this answerthis answer 了解如何将java.time API 与JDBC 结合使用。

标签: java postgresql date jdbc


【解决方案1】:

不清楚这是否是您唯一的问题,但几乎可以肯定这段代码不是您想要的:

Date aDate = null;
aDate.setYear(1990);
aDate.setDate(01);
aDate.setMonth(05);
  • 它会抛出一个NullPointerException,因为你试图取消引用null
  • 然后您尝试将年份设置为 3890AD(java.util.Date 是基于 1900 年的年份)
  • 然后您将月份设置为六月。如果您认为您将月份设置为 5 月,请再想一想 - Date 是从 0 开始的几个月
  • 您使用的所有方法都已弃用 - 这应该会为您带来很大的警示
  • 然后您尝试将 aDate 转换为 java.sql.Date 但没有迹象表明它 java.sql.Date

我建议:

  • 要么使用Joda Time 作为更好的日期/时间API,要么使用java.util.Calendar
  • 确保在设置值之前实际创建了一个实例
  • 以后可能会创建一个新的java.sql.Date

例如:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 1990);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.MONTH, 4); // Assuming you wanted May 1st

java.sql.Date date = new java.sql.Date(calendar.getTime().getTime());

// Ideally specify the columns here as well...
PreparedStatement prep = connection.prepareStatement(
    "insert into exampletable values (?,?)");
prep.setDate(1, date);
prep.setDate(2, date);

【讨论】:

  • @RafaelWerlang:您的编辑建议不正确。 Calendar.getTime() 返回一个 java.util.Datejava.util.Date.getTime() 返回 long。有 java.sql.Date(long) 构造函数,但没有 java.sql.Date(java.util.Date) 构造函数。
猜你喜欢
  • 2020-06-07
  • 2016-10-29
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 2010-09-09
  • 1970-01-01
  • 2018-09-21
相关资源
最近更新 更多