mysql中now()函數的使用,還有oracle的sysdate,可能埋下的坑


mysql中now()函數的使用,還有oracle的sysdate

在需求中如果系統中葯添加當前操作的時間那么很簡單的一個操作在寫sql的時候直接在這個字段對應的位置寫上now()函數就可以了,這樣就少些了很多代碼,尤其是在在用jdbc時寫的時候,可以少寫一些關於占位符的代碼,但是這樣做是有一個隱含的前提的是數據庫和服務器是在同一個機器上的,如果不在同一台機器上,那么這樣寫就是一個坑啊,我覺得沒有經驗,沒有掉進過坑的人就會這樣寫,比如我,偷懶就會這樣寫.等到用到這個時間來比較或者作為業務邏輯的判斷依據時,這個坑就出現了

lz在定位問題做業務的時候就遇到了,當時,服務器在lz的電腦上,數據庫在遠端,因為業務需要就把時間調到未來的一個時間點,然后開始做,但是后來經過了1周左右,偶然發現了一個表用的時間竟然時當前的真是時間,我就有了這樣的猜測,應該有一個程序員用了sysdate字段.盡管沒有明顯找到,但是應該是用的,不然不會取到真實的時間啊.尤其一些需要遠程調試的項目,同事對於編碼規范,我覺得sql的編碼規范也要把這一條加上去.

lz以前不懂也做過這樣的事情,現在只能提醒大家不要這樣做,然后改掉自己最近這樣寫的代碼.

建議用java生成new一個時間對象,如果用的是jdbc直接拼在sql里,可以不要用占位符.

 

//在dao中這樣寫
member(name,pw,register_time)value(?,?,'"+DbAssitor.sdfyyyyMMddHHmmss.format(new Date())+"');";

//數據庫助手類定義一個sdf類
public class DbAssitor
{
    /** 數據庫相關操作中操作結果是沒有影響行數 ***/
    public static int NO_AFFECT_ROW = 0;
    public static String sdfyyyyMMddHHmmss_ = "yyyy-MM-dd HH:mm:ss";
    public static SimpleDateFormat sdfyyyyMMddHHmmss = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM