Java 向數據庫中輸入 datetime類型數據

Java 向數據庫中輸入datetime類型數據

java可以使用jdbc訪問數據庫,但對時間這個問題很無奈。我們通常使用的時間是java.utils.Date。後來嘗試使用java.sql.Date朝數據庫中寫入時間,發現了一個問題,這些寫入的時間,無一例外的沒有後面的小時等信息,如下圖所示。
沒有紅色框框信息

經過搜索,理解了相關的問題。
java.sql.Date只表示數據庫中日期的部分,如果想向數據庫中寫入完整的時間,如2016-12-11 17:10:25.000 則需要使用java.sql.Timestamp這個類。

下面,我給大家介紹下兩種東西的使用方法,也算是給自己記錄了一份學習筆記。

字符串和java.utils.Date相互轉換

我們使用DateFormat 類來進行String和Date的轉換,而java.utils.Date是我們在java編程中經常使用的。

字符串轉化爲Date類型

DateFormat format = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");    // 這裏填寫的是想要進行轉換的時間格式
String str = "2016-12-11 17:17:10";         // 時間字符串

java.utils.Date date = null;
try{
date = format.parse(str);
}catch(Exception e){
e.printStackTrace();
}

Date類型轉化爲字符串

DateFormat format = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");    // 這裏填寫的是想要進行轉換的時間格式
Date date = new java.utils.Date();      // 獲取當前時間
String str = format.format(date);
// str = "2016-12-11 17:17:10"

java.sql.Date向數據庫寫入日期

這裏就需要java.sql.Date和java.utils.Date進行相互轉換了,這個轉換一般比較容易,利用構造方法和.getTime() 方法進行轉化。

java.utils.Date date = new java.utils.Date();   // 獲取當前時間
java.sql.Date sql_date = new java.sql.Date(date.getTime()); //轉換成java.sql.Date

接着使用PreparedStatement 向數據庫中寫入時間,即可。

ps.setDate(1, new java.sql.Date(date.getTime()));   // 設置項

java.sql.Timestamp向數據庫中寫入時間

需要注意的是,上邊一種方法只能將日期寫入到數據庫中,爲了能夠將時間精確到s甚至是ms。我們需要使用java.sql.Timestamp 類型。
java.sql.Timestamp 類型的構造函數也可以使用Long進行初始化

Date date = new Date();  
Timestamp timeStamp = new Timestamp(date.getTime());  

故在生成java.utils.Date時,將時間精確到s,然後使用預編譯語句執行SQL語句

Date date = new Date();  
Timestamp timeStamp = new Timestamp(date.getTime()); 
 sql= "insert into flowmeter2(total,std_flow,temp,press,time) values(?,?,?,?,?)";   
        try {  
            PreparedStatement ps = connection.prepareStatement(sql);  
            ps.setString(1, total);  
            ps.setString(2, std_flow);  
            ps.setString(3, temp);  
            ps.setString(4, press);  
            ps.setTimestamp(5, timeStamp);  
            ps.executeUpdate();  
            System.out.println("添加成功!");  
            connection.close();  

便可以將時間精確到ms級

發佈了48 篇原創文章 · 獲贊 59 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章