天天看點

java timestamp是什麼類型_Java中針對Timestamp的資料類型的操作

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的待垃圾回收是無法通過代碼自己控制的,而是由虛拟機控制的。