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. PHP框架 Laravel

    PHP框架 CI(CodeIgniter) http://www.codeigniter.com/ http://codeigniter.org.cn/ Laravel PHP Laravel htt ...

  2. java基础知识(一)之数据类型和运算符

    1.标识符:JAVA里面我们可以为之命名的就是标识符,如变量.方法.类等. 但是标识符只能包含字母.数字.下划线(_)和美元符号($),并且只能以字母.下划线和美元符号开头不能以数字开头.2.变量:在 ...

  3. iPython notebook 安装使用

    pip install jupyter jupyter notebook --allow-root

  4. 由等概率生成的0和1构建rand()函数

    问题:有函数rand01()能够等概率的生成0和1,用rand01生成rand(n),使其能够等概率的生成0-n-1的整数. java代码: public int rand(int n){ while ...

  5. 在web.Config文件中添加数据库连接配置

    新建一个网站,打开web.config文件,在connectionString配置节点添加add节点进行数据库进行数据库连接配置代码如下: <connectionStrings> < ...

  6. PCL struct“flann::SearchParams参数错误

    最近在使用PCL的KdTreeFLANN的时候报错:error C2079: “pcl::KdTreeFLANN<PointT>::param_radius_”使用未定义的 struct“ ...

  7. ssh -X前设置DISPLAY=localhost:0

    如果是在windows上用XMing做XServer,前面的localhost不能省,否则会被当作一个unix domain socket,而XMing没有实现这个功能,所以会出错 connect / ...

  8. 金融卡IC卡知识50问

    1.什么是金融IC卡? 金融IC卡又称为芯片银行卡,是以芯片作为介质的银行卡.芯片卡容量大,可以存储密钥.数字证书.指纹等信息,其工作原理类似于微型计算机,能够同时处理多种功能,为持卡人提供一卡多用的 ...

  9. Mysql CURD复习(数据库、表、数据)

    ###############################数据库的CURD:C: create database if not exists tp5_test default charset ut ...

  10. Selenium如何定位动态id/class的元素?

     今天再给大家分享一个定位不到元素的原因——动态id. 没有打开新页面.没有alert.没有frame.加了等待时间,但是还是定位不到元素?很有可能是你要定位的元素的属性是动态的,即每次打开页面,这个 ...