您的位置:首页 > 其它

Jdbc时间类型的处理

2017-10-26 16:26 225 查看
在mysql中常用的时间类型为Date,Time,Timestamp(时间戳)

同样,在java中也有三个时间类型与之对应,Date,Time,Timestamp,这三个时间类在java.sql包中,它们都是java.util.Date的子类,需要注意的是,Timestamp只是Date类的实现继承,而不是类型继承,下面请看JDK API1.6中关于三个子类的详细介绍

public class Date
extends Date


一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL
DATE
值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。

为了与 SQL
DATE
的定义一致,由
java.sql.Date
实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。 

public class Time
extends Date


一个与
java.util.Date
类有关的瘦包装器 (thin wrapper),它允许 JDBC 将该类标识为 SQL
TIME
值。
Time
类添加格式化和解析操作以支持时间值的 JDBC 转义语法。

应该将日期组件设置为 1970 年 1 月 1 日的 "zero epoch" 值并且不应访问该值。 

public class Timestamp
extends Date


一个与
java.util.Date
类有关的瘦包装器 (thin wrapper),它允许 JDBC API 将该类标识为 SQL
TIMESTAMP
值。它通过允许小数秒到纳秒级精度的规范来添加保存 SQL
TIMESTAMP
小数秒值的能力。Timestamp 也提供支持时间戳值的 JDBC 转义语法的格式化和解析操作的能力。

计算 Timestamp 对象的精度为二者之一:

19
,其为 yyyy-mm-dd hh:mm:ss 格式下的字符数
20 + s
,其为 yyyy-mm-dd hh:mm:ss.[fff...] 格式下的字符数,
s
表示给定 Timestamp 的标度(其小数秒精度)。
注:此类型由
java.util.Date
和单独的毫微秒值组成。只有整数秒才会存储在
java.util.Date
组件中。小数秒(毫微秒)是独立存在的。传递不是
java.sql.Timestamp
实例的对象时,
Timestamp.equals(Object)
方法永远不会返回
true
,因为日期的毫微秒组件是未知的。因此,相对于
java.util.Date.equals(Object)
方法而言,
Timestamp.equals(Object)
方法是不对称的。此外,
hashcode
方法使用底层
java.util.Date
实现并因此在其计算中不包括毫微秒。

鉴于
Timestamp
类和上述
java.util.Date
类之间的不同,建议代码一般不要将
Timestamp
值视为
java.util.Date
的实例。
Timestamp

java.util.Date
之间的继承关系实际上指的是实现继承,而不是类型继承。 

具体的例子:

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.Time;
import java.sql.Timestamp;

import jdbc1025.DbUtil;

public class DateAndTime {

public static void main(String[] args) {

Connection conn=DbUtil.getConnection();
Date date=new Date(System.currentTimeMillis());
Time time=new Time(System.currentTimeMillis());
Timestamp timestamp=new Timestamp(System.currentTimeMillis());
PreparedStatement ps=null;
try{

ps=conn.prepareStatement("insert into DateTest values(null,?,?,?)");
for(int i=0;i<10;i++) {
ps.setDate(1, date);
ps.setTime(2, time);
ps.setTimestamp(3, timestamp);
ps.execute();
}

System.out.println("执行成功");

}catch(Exception e) {
e.printStackTrace();
}finally {
DbUtil.close(ps);
DbUtil.close(conn);
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: