2011-10-05 64 views
2

我正在尝试用java编程数据库应用程序& PostgreSQL。我有一些日期数据类型的行。但我不能添加任何条目的数据库使用此代码:用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); 

我怎么能在一个PostgreSQL行添加日期在Java中查询?

回答

5

目前尚不清楚这是否是你的唯一的问题,但是这个代码是几乎可以肯定不是你想要的东西:

Date aDate = null; 
aDate.setYear(1990); 
aDate.setDate(01); 
aDate.setMonth(05); 
  • ,则会引发NullPointerException因为你想取消引用null
  • 然后,您要将年份设置为3890AD(java.util.Date年为1900年)
  • 然后,您将月份设置为6月份。如果你以为你这个月设置为月,再想想 - Date是基于0的数月
  • 所有你使用的是过时的方法 - 这应引起很大的警示灯为你
  • 然后,您就尝试投放aDatejava.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); 
+0

@RafaelWerlang:你编辑的建议是不正确。 'Calendar.getTime()'返回一个'java.util.Date'; 'java.util.Date.getTime()'返回一个'long'。有一个'java.sql.Date(long)'构造函数,但没有'java.sql.Date(java.util.Date)'构造函数。 –