JDBC中日期/時間的處理技巧

1.對於數據庫種不同的時間類型,要分別採用與之相對應的Java包裝類來存取;
日期類型用java.sql.Date,時間類型用java.sql.Time,日期/時間類型用java.sql.Timestamp;
這裏舉個例子:假設要從oracle中獲取系統時間,需要執行sql:select sysdate from dual,
然後在通過ResultSet獲取查詢結果時,一定要調用方法:getTimestamp(),這樣纔可以把年月日時分秒都取出來,
調用getDate()只能取出年月日,調用getTime()只能取出時分秒。



2.儘量不要調用getString()來獲取日期/時間類型的數據;
調用getString()也可以取出時間類型的數據,JDBC在內部將日期/時間轉換爲字符串;
但是這個字符串的格式卻取決於數據庫,用Oracle是一種,用Sybase又是一種,mysql又是一種,
如果你想兼容多種數據庫,還是不要用getString()的好。


3.如何將JDBC的日期/時間類型轉換爲字符串;
曾經看到過有人這樣寫:
java.sql.Timestamp timeStamp = //通過數據庫訪問獲取到該數據
java.util.Date utilDate = new java.util.Date(timeStamp.getTime());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(utilDate);

這樣也可以達到最終目的,但是有點問題,java.sql.Timestamp是繼承java.util.Date的,
因此format的時候直接傳入timeStamp即可,沒有必要臨時創建一個utilDate。像下面這樣就可以了:
java.sql.Timestamp timeStamp = //通過數據庫訪問獲取到該數據
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(timeStamp);



4.在做select、update或insert時,
如果某個字段爲日期/時間類型,最好用PreparedStatement,而不要採用Statement
經常會看到這樣的程序:
Connection conn;//前面的步驟略
Statement stmt = conn.createStatement();
stmt.execute("insert into tab ( begin_date ) values ( TO_Date( '06/27/2005 12:59:52', 'MM/DD/YYYY HH24:MI:SS'))");

熟悉oracle的人都知道,TO_Date是oracle裏的函數,其他數據庫沒有,即使有也很可能不一樣。那麼這段代碼只能用在oracle上,
如果換成其他數據庫,程序就無法執行了。

如果採用PreparedStatement,代碼是這樣:
Connection conn;//前面的步驟略
PreparedStatement pstmt = conn.prepareStatement("insert into tab ( begin_date ) values( ?)");
pstmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
pstmt.execute();
可以看出來,這段代碼與數據庫無關,只要是支持標準sql的數據庫都沒有問題。


5.java.sql.Timestamp如何轉換爲java.util.Date
java.sql.Timestamp是java.util.Date的子類,不需要做任何轉換直接賦值即可:
java.sql.Timestamp ts;
java.util.Date utilDate;
utilDate = ts;



6.java.util.Date如何轉換爲java.sql.Timestamp
java.util.Date是java.sql.Timestamp的父類,不能像技巧5那樣做了。要這樣:
java.sql.Timestamp ts;
java.util.Date utilDate;
ts.setTime(utilDate.getTime());

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章