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 {

/** * 插入stu表记录(PreparedStatement),效率更高,更平安 */ 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);    }} /** * 查问stu表记录 */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对象        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代码 珍藏代码XM返佣https://www.kaifx.cn/broker/x...
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<times;i++){          long currentTime=System.currentTimeMillis();      }  }  public static void testCalander(long times){//use 6299      for(int i=0;i<times;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的待垃圾回收是无奈通过代码本人管制的,而是由虚拟机管制的。