Preface

Environment:
Platform: Windows XP
Language: Java 1.5
IDE: MyEclipse 6.0.1
Database: SQL Server 2005 Enterprise en

Introduction

本文主要讲述Java中的Date Time 与SQL Server 2005里的Datetime 如何进行交互。涉及到的Date Type有
java.util.Date
java.sql.Date
java.sql.Time
java.sql.Timestamp

Section 1 - java.util.Date

经过一些testing,大概了解了这几个类的实际用法与限制。

java.util.Date create 的instance 是不能直接让JDBC 存到DB的,它会出现如下Exception:
Conversion failed when converting datetime from character string.

要将java.util.Date存到DB必须经过 type conversion成为sql下的Date,Time或Timestamp。

Section 2 - java.sql.Date

java.sql.Date只能将date存到DB,time将被截取而由DB中最小的time值(00:00:00)所取代。

Code:
  java.util.Date currentDateTime = new java.util.Date();
  System.out.println(currentDateTime);
  System.out.println(currentDateTime.getTime());
  Date currentDate = new Date(currentDateTime.getTime());
  System.out.println(currentDate);
  System.out.println(currentDate.getTime());
  String strSQL = "insert into TestDateTime values('"+currentDate+"')";
  executeHelper(strSQL);

Console Output:
Tue May 20 15:51:48 CST 2008
1211269908671
2008-05-20
1211269908671

Datebase Output:
2008-5-20 0:00:00

从result可以看出java.sql.Date实际并不是在其instance中就截取time,因为得到的Long值仍然跟java.util.Date的Long值一样,只是在显示输出或者对DB操作时才截去tIme的输出。0:00:00是由DB其System的最小time补充的。

Section 3 - java.sql.Time

java.sql.Time只能讲time存到DB,date将被截取而由DB中最小的date值(1900-1-1)所取代。

Code:
  java.util.Date currentDateTime = new java.util.Date();
  System.out.println(currentDateTime);
  System.out.println(currentDateTime.getTime());
  Time currentTime = new Time(currentDateTime.getTime());
  System.out.println(currentTime);
  System.out.println(currentTime.getTime());
  String strSQL = "insert into TestDateTime values('"+currentTime+"')";
  executeHelper(strSQL);

Console Output:
Tue May 20 16:03:52 CST 2008
1211270632312
16:03:52
1211270632312

Datebase Output:
1900-1-1 16:03:52

从result可以看出java.sql.Time实际并不是在其instance中就截取date,因为得到的Long值仍然跟java.util.Date的Long值一样,只是在显示输出或者对DB操作时才截去date的输出。1900-1-1是由DB其System的最小date补充的。

Section 4 - java.sql.Timestamp

java.sql.Timestamp可以将date和time都存到DB。

Code:
  java.util.Date currentDateTime = new java.util.Date();
  System.out.println(currentDateTime);
  System.out.println(currentDateTime.getTime());
  Timestamp currentTimestamp = new Timestamp(currentDateTime.getTime());
  System.out.println(currentTimestamp);
  System.out.println(currentTimestamp.getTime());
  String strSQL = "insert into TestDateTime values('"+currentTimestamp+"')";
  executeHelper(strSQL);

Console Output:
Tue May 20 16:24:40 CST 2008
1211271880796
2008-05-20 16:24:40.796
1211271880796

Datebase Output:
2008-5-20 16:24:40

从result可以看出java.sql.Timestamp的存储格式跟java.util.Date的不同,Timestamp的格式是专门对DB操作所定义的规范化格式,也就是说DB只能接收到这种格式传过来的值,这也可以大概知道为什么java.util.Date为什么不能直接传值给DB了。

Java中的Date Time 与SQL Server 2005里的Datetime 之间的交互的更多相关文章

  1. SQL Server 2005 中的分区表和索引

    SQL Server 2005 中的分区表和索引 SQL Server 2005          69(共 83)对本文的评价是有帮助 - 评价此主题   发布日期 : 3/24/2005 | 更新 ...

  2. 如何使用 DBCC MEMORYSTATUS 命令来监视 SQL Server 2005 中的内存使用情况

    https://technet.microsoft.com/en-us/solutionaccelerators/dd537566.aspx 注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完 ...

  3. 存储过程系列之调试存储过程 SQL Server 2005

    在数据库中直接调试  在数据库中直接调试是调试SQL Server 2005的存储过程的最简单的方法. 在Visual Stuido的IDE中你可以选择单步执行存储过程,然后就可以一条语句一条语句地单 ...

  4. SQL SERVER 2005 请求失败或服务未及时响应

    出现的问题如图所示,在开始->程序->Microsoft SQL Server 2005->配置工具->SQL Server Configuration Manager中,打开 ...

  5. 第87节:Java中的Bootstrap基础与SQL入门

    第87节:Java中的Bootstrap基础与SQL入门 前言复习 什么是JQ? : write less do more 写更少的代码,做更多的事 找出所有兄弟: $("div" ...

  6. Java中的Date类型无法赋值给数据库的datetime类型

    因为Java中new Date()的结果是"Thu Aug 27 19:03:54 CST 2020",而mysql中的datetime不接受这样的日期格式,插入数据会报错. 解决 ...

  7. win7中 SQL server 2005无法连接到服务器,错误码:18456

    win7中 SQL server 2005无法连接到服务器,错误码:18456.. 数据库刚装完.我用Windows登陆  结果登陆不上去.. 选中SQL Server Management Stud ...

  8. SQL SERVER 2005/2008 中关于架构的理解(二)

    本文上接SQL SERVER 2005/2008 中关于架构的理解(一)      架构的作用与示例 用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决SQL SERVE ...

  9. SQL SERVER 2005/2008 中关于架构的理解(一)

    SQL SERVER 2005/2008 中关于架构的理解(一) 在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询, ...

随机推荐

  1. js中slice,splice和split方法的区别

    1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进行部分截取,并返回一个数组副本:参数start是截取的开始数组索引,end参数等于你要取的最后一个字符 ...

  2. 生成ssl脚本文件

    read -p "Enter your domain [www.example.com]: " DOMAIN echo "Create server key...&quo ...

  3. 23-从零玩转JavaWeb-单例设计模式

    一.什么是设计模式 二.什么是单例设计模式 三.单例设计模式特点 四.单例设计模式优点 五.单例设计模式实现步骤   六.什么是工具类  

  4. leetcode:First Missing Positive分析和实现

    题目大意: 传入整数数组nums,求nums中未出现的正整数中的最小值.要求算法在O(n)时间复杂度内实现,并且只能分配常量空间. 分析: 一般碰到这种问题,都先对数组进行排序,再遍历数组就可以找到最 ...

  5. 面试题:Java必知必会:异常机制详解 背1

    一.Java异常概述 在Java中,所有的事件都能由类描述,Java中的异常就是由java.lang包下的异常类描述的. Trowable是所有异常的超类.  他的常用方法printStackTrec ...

  6. 更改windows服务的配置文件(app.config)必须重启服务才能生效吗?

    这个问题是前一阶段写windows服务碰到的.本来在写获取配置文件的某个配置的值的时候,通常我都是写类似下面的这么一个静态方法来获取: 1: /// <summary> 2: /// 获取 ...

  7. Sublime Text notes

    1. 设置在窗口右下方显示文件的编码,在user preferences里加上以下的配置 2.设置用新标签页打开新文件而不是用新窗口打开,将以下配置改为false(默认为true)

  8. Linux pkg-config命令

    一.简介 pkg-config用来检索系统中安装库文件的信息.典型的是用作库的编译和连接. 二.实例 http://blog.chinaunix.net/uid-20595934-id-1918368 ...

  9. 跨库连接报错Server 'myLinkedServer' is not configured for RPC

    Solution: Problem is most likely that RPC is not configured for your linked server. That is not a de ...

  10. 【Java】对Map按key和value分别排序

    一.什么是Map? 在讲解Map排序之前,我们先来稍微了解下map. map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. ...