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的待垃圾回收是无奈通过代码本人管制的,而是由虚拟机管制的。