在Oracle數(shù)據(jù)庫中時間的存儲和讀取(讀取時、分、秒)
一般數(shù)據(jù)庫中時間的格式為DATE類型,而我們從頁面中獲取的時間往往為String類型,這個就需要類型的轉(zhuǎn)換。一般我們會通過調(diào)用java.text.SimpleDateFormat JAVA類來對其進行轉(zhuǎn)換。這個JAVA類中我們經(jīng)常用到的方法有兩個,一個是format(將時間格式的數(shù)據(jù)轉(zhuǎn)換成String類型),另一個就是parse(將String類型轉(zhuǎn)換成DATE類型)。我們一般可以將parse封裝到自己的方法中,例:
/**
* 方法描述:頁面中字符串轉(zhuǎn)化為日期類型
*
* 輸入?yún)?shù):從頁面中得到的以字符串形式表示的日期數(shù)據(jù)
* 輸出參數(shù):轉(zhuǎn)換后的日期
*/
Public class TimeExh{
public static Date transToDate(String strDateFromPage) {
Date date = null;
//此處為yyyy-MM-dd 則為2005-1-13
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//建立一個一定格式的 SimpleDateFormat
if(strDateFromPage==null) {
return new Date();
}
if (strDateFromPage.length()>10) {
sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//此處時間方式為2005-1-13 20:00:12
}
try {
date = sdf.parse(strDateFromPage);
} catch (Exception ex) {
ex.printStackTrace();
}
return date;
}
}
在Oracle數(shù)據(jù)庫中提供了to_date的方法來對String類型的時間來進行轉(zhuǎn)換。而在Oracle數(shù)據(jù)庫中不能將時間直接放到VO中傳給數(shù)據(jù)庫,這樣數(shù)據(jù)庫中的時間為格林氏時間,不符合中國人的時間習(xí)慣。所以在這里有兩中不同的處理方式進行處理。
第一種:VO中存儲時間的類型為String類型。
我在這里寫一個簡單的VO為:
public class DateVO {
..........//省略掉定義部分
public void setStart_Date(String Start_Date){
start_Date= start_Date
}
public String getStart_Date() {
return this.Start_Date;
}
/**
* 判斷Start_Date是否為空
*/
public boolean isEmptyStart_Date() {
if (this.Start_Date == null || this.Start_Date.equals("") ) {
return true;
} else {
return false;
}
}
}
//A.所傳遞參數(shù)為DATE類型
//獲得當(dāng)前時間,并將值傳遞給VO:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//將當(dāng)前時間轉(zhuǎn)換為yyyy-MM-dd hh:mm:ss格式
String nowDate = sdf.format(new Date());
//將此String值放進VO中的setDate()方法中。
vo.setDate(nowDate);
//在組織SQL語句時從VO中獲得時間值。
SQL語句的前部分省略,主要為后部分的時間的處理。
sbSQL.append(insert into news (start_date,....) value ();
if (!vo.isEmptyStart_Date()) {
sbSQL.append("");
sbSQL.append("to_date(‘");
//to_date為Oracle數(shù)據(jù)庫中轉(zhuǎn)換時間的函數(shù),處理對象為String
sbSQL.append(vo.getStart_Date());
sbSQL.append("‘,‘yyyy-mm-dd hh24:mi:ss‘)");//注意這行代碼,格式得正確,否則得不到時、分、秒
} else {
sbSQL.append("NULL");
}
sbSQL.append(" ....) ");
//B.所傳遞參數(shù)為String類型(從頁面獲取)
if (request.getParameter("Start_Date") != null
&& !request.getParameter("Start_Date").equals("")) {
//將此String值放進VO中的setDate()方法中。
vo.setDate(Start_Date);
}
后面處理同上
........
第二種:VO中存儲時間的類型為DATE類型。
public class DateVO {
..........//省略掉定義部分
public void setStart_Date(Date Start_Date){
start_Date= start_Date
}
public Date getStart_Date() {
return this.Start_Date;
}
/**
* 判斷Start_Date是否為空
*/
public boolean isEmptyStart_Date() {
if (this.Start_Date == null || this.Start_Date.equals("") ) {
return true;
} else {
return false;
}
}
}
//A.所傳遞參數(shù)為DATE類型
//獲得當(dāng)前時間,并將值傳遞給VO:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String nowDate = sdf.format(new Date());//將當(dāng)前時間轉(zhuǎn)換為yyyy-MM-dd hh:mm:ss格式
將此String值放進VO中的setDate()方法中。
vo.setDate(TimeExh.transToDate(nowDate));
//在組織SQL語句時從VO中獲得時間值。
SQL語句的前部分省略,主要為后部分的時間的處理。
sbSQL.append("insert into news (start_date,....) value (");
if (!vo.isEmptyStart_Date()) {
sbSQL.append("");
sbSQL.append("to_date(‘");
sbSQL.append(sdf.format(vo.getStart_Date()));
sbSQL.append("‘,‘yyyy-mm-dd hh24:mi:ss‘)");
} else {
sbSQL.append("NULL");
}
sbSQL.append(" ....) ");
//B.所傳遞參數(shù)為String類型
if (request.getParameter("Start_Date") != null
&& !request.getParameter("Start_Date").equals("")) {
//將此String值放進VO中的setDate()方法中。
vo.setDate(TimeExh.transToDate(request.getParameter("Start_Date")));
}
//后面處理同上
.........