JDBC 日期精度丢失

在使用"两间瓦房"框架时遇见一个问题,在oracle数据库中插入date类型的数据,出现精度丢失问题,具体表现为:数据库中存储为"2012-06-14",而"HH:mm:ss"部分却不见了.跟踪源程序发现问题出在了如下代码上:

 1 case java.sql.Types.TIMESTAMP:

 2   java.util.Date d;

 3    if (val.length() > 10) {  4      d = sf.parse(val);  5    } else {  6      d = sfs.parse(val);  7  }  8    long l = d.getTime();  9    java.sql.Timestamp ts = new java.sql.Timestamp(l); 10  st.setTimestamp(iParam, ts); 11    break;

12case java.sql.Types.TIME:

13    if (val.length() > 10) {

14       d = sf.parse(val);

15    } else {

16      d = sfs.parse(val);

17    }

18    l = d.getTime(); 19    java.sql.Time stm = new java.sql.Time(l); 20    st.setTime(iParam, stm);

21    break;

22case java.sql.Types.DATE:

23    if (val.length() > 10) {

24       d = sf.parse(val);

25     } else {

26       d = sfs.parse(val);

27     }

28     l = d.getTime(); 29    java.sql.Date sd = new java.sql.Date(l); 30    st.setDate(iParam, sd);

37  break;

上述代码中 红色背景的代码,在转换时 只保留了日期(yyyy-MM-dd),而丢失了时间(HH:mm:ss)内容.这是导致精度丢失的罪魁祸首.

既然发现问题,我们就要解决问题,可以用timestamp类型 来取代date,可以参考上述蓝色背景的代码片段.

---------------------------------------------------------------------------------------------------------------------

下面根据上述问题来说一点理论知识:

java.sql 定义的时间类型包含三个类,date,time和timestamp.分别用来表示日期(无时间信息,eg: yyyy-mm-dd),时间(只处理时间,无日期部分, eg:hh:mm:ss)和时间戳(精确到纳秒级别)在它们都继承自java.util.date。

你可能感兴趣的:(jdbc)