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級