1. 程式人生 > >(java筆記)ClassCastException: java.util.Date cannot be cast to java.sql.Date

(java筆記)ClassCastException: java.util.Date cannot be cast to java.sql.Date

目的

根據oracle資料庫中的一個日期欄位,利用Java程式碼自動更新資料庫中的資料。

難點

資料庫中的資料欄位為

LEASEDAY | DATE型別

在java這邊的條件為字串日期

yyyy-mm-dd | String型別

由於存在這樣的型別的差異,就會碰到一些這樣的問題:

ClassCastException: java.util.Date cannot be cast to java.sql.Date

解決辦法

先上程式碼

    /**
     * 單個方法,作用,根據輸入的day:yyyy-mm-dd格式的字元日期,將資料庫中的該天所有資料更新為0
     * 0表示假期
     * @param
day * @throws SQLException * @throws ParseException */
public void UpdateDayTypeByLeaseDay(String day) throws SQLException, ParseException{ //UPDATE NYC_TRIP_SUM_BYHOUR SET daytype='0' where leaseday='2016-12-31' String sql="UPDATE NYC_TRIP_SUM_BYHOUR SET daytype='0' where leaseday=?"
; //建立連線 Connection conn=daoUtil.getConnection(); PreparedStatement preStmt=conn.prepareStatement(sql); // SimpleDateFormat sdfDay=new SimpleDateFormat("yyyy-MM-dd");//小寫的mm表示的是分鐘 //先將字元日期轉為util日期 SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd"); Date dayDateUtil=df.parse(day); System.out.println("轉換成Util日期"
+dayDateUtil); //由於util在sql中不符,再轉為sql日期 java.sql.Date dayDateSql = new java.sql.Date(dayDateUtil.getTime()); System.out.println("轉換成sql日期"+dayDateSql); //將日期引數傳入 preStmt.setDate(1, dayDateSql); preStmt.executeQuery(); //關閉連線資源 preStmt.close(); conn.close(); }

關鍵在於中間的幾行:

//先將字元日期轉為util日期
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
Date dayDateUtil=df.parse(day);
System.out.println("轉換成Util日期"+dayDateUtil);

//由於util在sql中不符,再轉為sql日期
java.sql.Date dayDateSql = new java.sql.Date(dayDateUtil.getTime());
System.out.println("轉換成sql日期"+dayDateSql);

為什麼會這樣呢:

  1. oracle預設的系統時間就是sysdate函式,儲存的資料形如25-3-200510:55:33
  2. java 中取時間的物件是java.util.Date。
  3. oracle中對應的時間物件是java.util.Date,java.sql.Time,java.sql.Timestamp、它們都是是java.util.Date的子類。
  4. oracle中與date操作關係最大的就是兩個轉換函式:to_date(),to_char()。to_date()一般用於寫入日期到資料庫時用到的函式。to_char()一般用於從資料庫讀入日期時用到的函式。

所以可以看到我們問題就解決了,先將String 格式轉為date (java.util)
在獲取time也就是相對1900的時間差 秒,再將秒,轉為sql.date型別

參考:Oracle | Java日期處理