`
xgbjmxn
  • 浏览: 263478 次
  • 性别: Icon_minigender_1
  • 来自: 新乡
社区版块
存档分类
最新评论

java.sql.Date,java.sql.Time和java.sql.Timestamp

阅读更多
java.sql.Date,java.sql.Time和java.sql.Timestamp
java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类)。他们跟java.util.Date有什么区别, 设计这三个类有什么用意呢?
先看看一个例子:
但是为什么java.sql.Date类型的值插入到数据库中Date字段中会发生数据截取呢?
java.sql.Date是为了配合SQL DATE而设置的数据类型。“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD
当我们调用ResultSet的getDate()方法来获得返回值时,java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。
可以看出,java.sql.Date,java.sql.Time和java.sql.Timestamp都是为了更好的规范化java.util.Date, 让它能更好的区分日期,时分秒。
一、java.util.Date向java.sql.Date的规范化
如果数据库中存在的非规范化部分的信息将会被劫取。在sun提供的ResultSet.java中这样对getDate进行注释的:
Retrieves the value of the designated column in the current row of this <code>ResultSet</code> object as a “java.sql.Date” object in the Java programming language.
同理。如果我们把一个java.sql.Date值通过PrepareStatement的setDate方法存入数据库时,java程序会对传入的java.sql.Date规范化
,非规范化的部分将会被劫取。
然而,我们java.sql.Date一般由java.util.Date转换过来,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()).
显然,这样转换过来的java.sql.Date丢失了日期部分.
在http://www.thunderguy.com/semicolon/2003/08/14/java-sql-date-is-not-a-real-date/ 文章中提到,要保存java.util.Date的精确值,
我们需要利用java.sql.Timestamp.
java.sql.Date stores only date information, not times. Simply converting a java.util.Date into a java.sql.Date will silently set the time to midnight. So, to store date/times to be manipulated as java.util.Date objects, don’t do this:
// BUG: loses time of day
preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
do this instead:
preparedStatement.setTimestamp(1, new java.sql.Timestamp(date.getTime()));
java.sql.Timestamp is not a date

                 *                         *                         *
二、java.sql.Timestamp到java.util.Date的转化
java.sql.Timestamp extends java.util.Date , but it should not be used as a Date . In JDK 1.3.1, Timestamp.getTime() (inherited from Date ) returns the time to the nearest second only, but JDK 1.4.2 and JDK 1.5 it returns the time to the nearest millisecond as expected. So in JDK 1.3, when reading a timestamp from a ResultSet , don’t do this:
// Java 1.3
java.util.Date d = resultSet.getTimestamp(1);
long millis = d.getTime(); // BUG: loses fractional seconds in JDK 1.3
To get the full date including milliseconds, you have to do this:
java.sql.Timestamp timestamp = resultSet.getTimestamp(1);
java.util.Date d = new java.util.Date(timestamp.getTime() +
                                       timestamp.getNanos() / 1000000);
//nanos是纳秒,1纳秒=百万分之一毫秒
In JDK 1.4.2 and JDK 1.5, you can just do this, depending on what you’re going to do with the Date:
// Java 1.4+
java.util.Date d = resultSet.getTimestamp(1);
But this might be safer since it avoids any other potential Timestamp problems:
// Java 1.4+
java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());
If your code needs to run on JDK 1.3 and later, you’ll have to do this:
java.sql.Timestamp timestamp = resultSet.getTimestamp(1);
long millis = (timestamp.getTime() / 1000) * 1000 + timestamp.getNanos() / 1000000;
java.util.Date d = new java.util.Date(millis);
分享到:
评论

相关推荐

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式[文].pdf

    java.sql.Date、java.sql.Time和java.sql.Timestamp都是java.util.Date的子类(包装类)。但是,java.sql.Date类型的值插入到数据库中Date字段中会发生数据截取。这是因为java.sql.Date只包含年月日信息,时分秒毫秒...

    Java.util.date与java.sql.date区别和转换

    类型转换 ( Java.util.date与java.sql.date区别和转换

    有关java中的Date,String,Timestamp之间的转化问题

    Java 中的 `java.util.Date` 类和 `java.sql.Date` 类都是用于表示日期和时间的,但是它们有所不同。`java.util.Date` 类有无参的构造函数,而 `java.sql.Date` 类没有无参的构造函数。 可以使用以下方式将 `String...

    项目源码-java图书馆管理系统

    import java.sql.Date; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import ...

    java四种时间的区别和联系

    java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp区别和联系

    xfire测试项目(包括复杂数据类型)

    public java.sql.Timestamp getTimestamp(java.sql.Timestamp a); public java.sql.Date getSDate(java.sql.Date a); public java.sql.Time getTime(java.sql.Time a); /*自定义类型*/ public UserBean getUser...

    sqlserver数据库类型对应Java中的数据类型

    在 Java 中,timestamp 对应的数据类型是 java.sql.Timestamp。 varbinary 在 SQL Server 中,varbinary 是一个二进制类型,用于存储变长二进制数据。在 Java 中,varbinary 对应的数据类型是 byte 数组。 ...

    DateUtil.java

    将java.sql.Date类型格式化成字符串显示; 将Timestamp类型格式化成字符串显示 将字符串转换成java.util.Date类型 将字符串转换成java.sql.Date类型 将字符串转换成Timestamp类型 比较两个时间的时间差,返回格式为x天...

    Java对象序列化和反序列化工具Xson.zip

    24.java.sql.Timestamp 25.InetAddress 26.Inet4Address 27.Inet6Address 28.InetSocketAddress 1.使用xson进行对象到字节数组的序列化 User user = new User(); //set.... byte[] data = XSON.write...

    mysql时间类型对应的java类型1

    Mysql 与 java 的时间类型 MySql的时间类型有 Java中与之对应的时间类型 datejava.sql.Date Datetimejava.sql

    Java数据类型和MySql数据类型对应一览

    在 Java 中,日期时间类型对应的是 java.sql.Date、java.sql.Time、java.sql.Timestamp 等类型。在 MySql 中,日期时间类型对应的是 DATE、TIME、DATETIME、TIMESTAMP 等类型。其中,DATE 类型用于存储日期,TIME ...

    Android的SQLite中DateTime类型数据的存取问题

    首先,使用 SimpleDateFormat 需要将字符串类型的日期数据解析成 java.util.Date 类型,然后使用 java.sql.Timestamp 将其转换成 Timestamp 对象。最后,可以直接将 Timestamp 对象插入到 SQLite 数据库中。 取出 ...

    mysql 日期函数.txt

    1. 2.DAYOFWEEK(date) 3.WEEKDAY(date) 4.DAYOFMONTH(date) ...UNIX_TIMESTAMP(date) 26.FROM_UNIXTIME(unix_timestamp) FROM_UNIXTIME(unix_timestamp,format) 27.SEC_TO_TIME(seconds) 28.TIME_TO_SEC(time)

    Mysql、orcale 中的数据类型与java中的数据类型对应表.pdf

    在 Oracle 中,Date 类型对应 Java 中的 java.util.Date 和 java.sql.Date 类型。其中 java.util.Date 类型的作用范围更广泛,因此通常应用于业务逻辑层,而 java.sql.Date 类型主要用于数据库交互。 在数据类型...

    Date4long2String

    日期转换,long类型时间转换成string类型

    sql访问数据库工具类--SqlUtils(java源码)

    || object.getClass().equals(Timestamp.class)) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return "to_date('" + sdf.format(object) + "','yyyy-mm-dd hh24:mi:ss')...

    jasper变量的表达式的问题

    ATTLIST field name NMTOKEN #REQUIRED class (java.lang.Object | java.lang.Boolean | java.lang.Byte | java.util.Date | java.sql.Timestamp | java.lang.Double | java.lang.Float | java.lang.Integer | java....

    java到MySQL的日期操作

    将java中的Date类型存放进MySql数据库需要用到java.sql.Timestamp包,

    解析MySql与Java的时间类型

    MySql的时间类型有 Java中与之对应的时间类型date java.sql.DateDatetime java.sql.TimestampTimestamp java.sql.TimestampTime java.sql.TimeYear 

    java时间处理工具类--DateUtils

    * @(#)DateUtil.java * * * @author kidd * @version 1.00 2007/8/8 */ import java.util.*; import java.text.*; import java.sql.Timestamp; public class DateUtils { /** * 时间范围:年 */ ...

Global site tag (gtag.js) - Google Analytics