2011-10-05 65 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)'構造函數。 –