Jdbc时间类型的处理

在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 的实例。Timestampjava.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);
		}
		
	}

}


你可能感兴趣的:(mysql学习总结)