九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Hibernate操作時間需要注意的問題(轉)
hibernate很大的一個特點就是屏蔽了數(shù)據(jù)庫的差異,使用了hibernate就應該盡量HQL來操作數(shù)據(jù)庫(除非不得不用數(shù)據(jù)庫本身的一些特性),而對于時間類型的比較hibernate也是支持的。

HQL:     and acceptDate<=:end

用一個時間類型來替換參數(shù)end:query.setDate("end",endDate);

順便在提一個問題,我們經(jīng)常碰到查詢從A(起始時期)到B(結束日期)的紀錄。

如果數(shù)據(jù)庫中字段類型為timestamp,那么查詢2005-11-23到2005-11-23的紀錄時不會出現(xiàn)2005-11-23那一天的紀錄,哪怕你的比較符號用的是>=和<=;因為數(shù)據(jù)庫中的2005-11-23的紀錄是這樣的格式

2005-11-23 15:35:48:253,而query.setDate設置一個時間參數(shù)進去,他是用這個時間比較的

2005-11-23 00:00:00 000,

所以因該用query.setTimeStamp("end",endDate);

如果從view層取到的date不包含后面的time信息,最好

                 endDate.setHours(23);

                 endDate.setMinutes(59);

                 endDate.setSeconds(59);

對開始時間

startDate.setHours(0)

startDate.setMinutes(0);

startDate.setSeconds(0);

這樣就是查詢 A-0:0:0 到 B-23:59:59時間段的數(shù)據(jù):

3:程序積累

  實例一:

Hibernate在保存和更新Date類型的數(shù)據(jù)到數(shù)據(jù)庫的時候,如果設置不當,會舍棄時分秒,和數(shù)據(jù)庫中Date類型的精確度不符(如Oracle的Date是帶時分秒的).

引起的原因主要是mapping文件中的字段類型被設成了type="date",而mapping文件一般都是通過hibernate提供的工具生成的,hibernate提供的工具默認把數(shù)據(jù)庫端date型的字段設成type="date".從而Hibernate在用JDBC做數(shù)據(jù)庫更新的時候會用 statement的setDate(index, sqlDate),插入數(shù)據(jù)庫的日期只有年月日.

下面的JDBC代碼演示了這個問題:

            String sql = "UPDATE Timetest T SET T.datev=? WHERE T.id=?";
            stmt = conn.prepareStatement(sql);

            // java.sql.Date sqlDate = new java.sql.Date(26,7,2010);
            // sqlDate.setTime(System.currentTimeMillis());
            // stmt.setDate(1, sqlDate); //如果是用setdate的方式,時分秒會被舍棄


            //用setTimestamp的方式,時分秒會被保存
            stmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));

            stmt.setLong(2, 1L);
            stmt.executeUpdate();
            conn.commit();

使用時需要注意的問題:

1,如果是用Hibernate的對象來影射數(shù)據(jù)庫操作(save,load..),需要將mapping文件的type="date"改成type="timestamp".

2,如果用Query(session的createQuery和createSQLQuery),在賦值的時候用query.setTimestamp(0, new Date());

 

 

String   hql   =     "   from   table   tb   where   tb.startdate   =   :Startdate "; 
Query   q   =   session.createQuery(hql).setString( "Startdate ",   sdate); 
修改為: 
String   hql   =     "   from   table   tb   where   tb.startdate   like   :Startdate "; 
Query   q   =   session.createQuery(hql).setString( "Startdate ",   sdate+ "% "); 

 

 實例二:

java.sql.Date   beginDate=java.sql.Date.valueOf( "2006-6-1 "); 
java.sql.Date   endDate=java.sql.Date.valueOf( "2006-6-2 "); 
"from   table   tb   where   tb.startdate   <:endDate   and   tb.startdate   > =   :beginDate "; 
query.setDate( "beginDate ",beginDate); 
query.setDate( "endDate ",endDate);




注:query.setParameter("startDate", startDate); 可以解決類型不匹配的問題,但是速度相比較會稍慢些

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
oracle存儲過程備忘以及在Hibernate中使用存儲過程
關于hibernate中Qurey類的setDate方法自動截掉時分秒的解決辦法
HQL語句詳解
sql server datediff() 用法
Hibernate5.2之原生SQL查詢
hibernate--basedao,借鑒別人的完善自己的
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服