Java中針對Timestamp的資料類型操作
資料庫使用Oracle 10g 32位,存在一張表STU(學生表)。
這裡寫圖檔描述
二、項目結構圖
這裡寫圖檔描述
三、關鍵代碼
Stu (bean)
package sample.bean;
import java.sql.Timestamp;
public class Stu {
private int stuNo;
private String stuName;
private Timestamp createTime;
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public Timestamp getCreateTime() {
return createTime;
}
public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
}
}
StuDao
public class StuDao {
public void testInsertStuPs(Stu stu) {
Connection conn = DBUtil.getConnection(); // 建立資料庫連接配接
PreparedStatement ps = null;// 建立PreparedStatement對象
try {
System.out.println("=========連接配接成功===============");
String sql = "insert into stu values(?,?,?)";
ps = conn.prepareStatement(sql); // 擷取PreparedStatement對象
ps.setInt(1, stu.getStuNo());
ps.setString(2, stu.getStuName());
ps.setTimestamp(3, stu.getCreateTime());
int rs = ps.executeUpdate();// 執行更新語句
if (rs != 0) {
System.out.println("insert success");
} else {
System.out.println("insert fail");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.closePreparedStatement(ps);
DBUtil.closeConnection(conn);
}
}
public Stu testSelectStuByNo(int stuNo) {
Connection conn = DBUtil.getConnection(); // 建立資料庫連接配接
PreparedStatement statement = null;// 建立statement對象
ResultSet result = null;// 建立結果集ResultSet
Stu stu = new Stu();
try {
String sql = "select * from stu where stuno=?";
statement = conn.prepareStatement(sql); // 擷取PreparedStatement對象Axitrader返傭https://www.kaifx.cn/broker/axitrader.html
statement.setInt(1, stuNo);
result = statement.executeQuery();
if (result.next()) {
stu.setStuNo(result.getInt(1));
stu.setStuName(result.getString(2));
stu.setCreateTime(result.getTimestamp(3));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.closeResultSet(result);
DBUtil.closePreparedStatement(statement);
DBUtil.closeConnection(conn);
new Date().getTime();
最近做監控系統,發現代碼中有前兩種方法,然後突然有了一個想法,到底哪個更快呢?
然後做了如下實驗:
Java代碼 收藏代碼
import java.util.Calendar;
import java.util.Date;
public class TimeTest {
private static long _TEN_THOUSAND=10000;
public static void main(String[] args) {
long times=1000*_TEN_THOUSAND;
long t1=System.currentTimeMillis();
testSystem(times);
long t2=System.currentTimeMillis();
System.out.println(t2-t1);
testCalander(times);
long t3=System.currentTimeMillis();
System.out.println(t3-t2);
testDate(times);
long t4=System.currentTimeMillis();
System.out.println(t4-t3);
}
public static void testSystem(long times){//use 188
for(int i=0;i
long currentTime=System.currentTimeMillis();
}
}
public static void testCalander(long times){//use 6299
for(int i=0;i
long currentTime=Calendar.getInstance().getTimeInMillis();
}
}
public static void testDat該方法的含義是,表示定時器将延遲delay(毫秒)時間後,執行task任務。如果delay為負數或0,則任務會被立即進行。而且是一次性的執行任務,後續不會重複(或定時)執行該任務。
對于Timer類,還提供一個同樣功能的方法,如下:
1
public void schedule(TimerTask task, Date time)
該方法與上面方法的差別是,上面方法是指定延期一段時間執行,這個方法是指定在某個具體的時間點執行。注意,如果系統的目前時間已經超過了參數time指定的時間,該任務會被立即執行。
當運作上面代碼時,我們發現程式立即列印類似如下的2條資訊:
main start:2016-01-13 22:23:18
task run:2016-01-13 22:23:18
因為我們這裡給schedule方法傳遞的delay參數值為0,是以任務會被立即執行,是以兩個語句列印出來的時間是一樣的,這是應該的。大家可以自己改變傳入的delay值來看輸出資訊的變化。再過大約5秒(即sleep的時間)後,繼續列印了1條資訊:
main end:2016-01-13 22:23:23
列印資訊的時間與上面語句差了5秒,與sleep設定的一緻,也是很合理的。
但我們會發現一個很有趣的現象,會發現該程序不會退出,這時main主線程已經結束了,這說明定時器把任務完成後,即使後面沒有待等待執行的任務了,定時器中建立的背景線程也不會立即退出。檢視了相關的java doc文檔,解釋說定時器線程不會主動退出,需要等待垃圾回收,但java的待垃圾回收是無法通過代碼自己控制的,而是由虛拟機控制的。