1. 程式人生 > >java.util.Date日期類通過java語句轉換成Sql(這裡測試用的是oracle)語句可直接插入(如:insert into)的日期型別

java.util.Date日期類通過java語句轉換成Sql(這裡測試用的是oracle)語句可直接插入(如:insert into)的日期型別

    public void add(Emp emp) throws Exception{
        QueryRunner runner = new QueryRunner(JdbcUtil.getDataSource());
        String sql = "insert into emps (id,username,salary,hiredate) values(?,?,?,?) ";
        java.util.Date ud = emp.getHiredate();
        //initialize the ud such as ud = new java.util.Date(); 
java.sql.Date sd = new java.sql.Date(ud.getTime()); //java.sql.Timestamp dateSQL = new java.sql.Timestamp(ud.getTime()); Object[] params = {emp.getId(),emp.getUsername(),emp.getSalary(),sd}; runner.update(sql,params); }

 

java.util.Date與java.sql.Date,java.sql.TimeStmp之間的轉化,可以參考()       
注意:java.sql.Date型別的值插入到資料庫中Date欄位中會發生資料的擷取。 為什麼會擷取呢?
        java.sql.Date是為了配合SQL DATE而設定的資料型別。“規範化”的java.sql.Date只包含年月日資訊,時分秒毫秒都會清零。格式類似:YYYY-MM-DD。當我們呼叫ResultSet的getDate()方法來獲得返回值時,java程式會參照"規範"的java.sql.Date來格式化資料庫中的數值。因此,如果資料庫中存在的非規範化部分的資訊將會被劫取。   
  在sun提供的ResultSet.java中這樣對getDate進行註釋的:        Retrieves the of the designated column in the current row of this <code>ResultSet</code> object as a “java.sql.Date” object in the Java programming language.
         同理。如果我們把一個java.sql.Date值通過PrepareStatement的setDate方法存入資料庫時,java程式會對傳入的java.sql.Date規範化,非規範化的部分將會被劫取。然而,我們java.sql.Date一般由java.util.Date轉換過來,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
顯然,這樣轉換過來的java.sql.Date往往不是一個規範的java.sql.Date.要儲存java.util.Date的精確值,
我們需要利用java.sql.Timestamp.