JavaWeb学习笔记(十三)—— JDBC时间类型的处理
一、Java中的时间类型
Java中用类java.util.Date对日期/时间做了封装,此类提供了对年、月、日、时、分、秒、毫秒以及时区的控制方法,同时也提供一些工具方法,比如日期/时间的比较,前后判断等。
java.util.Date中采用一个long型的数来保存日期/时间,它表示从格林威治时间1970年1月1日00点00分00秒至今的毫秒数。
在JDBC中使用的Date都是sql包下的:java.sql.Date、java.sql.Time、java.sql.Timestamp,这三个类都是java.util.Date的子类。
- java.sql.Date表示日期,只包括年月日,没有时分秒。会丢失时间;
- java.sql.Time表示时间,只包括时分秒,没有年月日。会丢失日期;
- java.sql.Timestamp表示时间戳,包括年月日,时分秒,还有毫秒和纳秒;值得注意的是它比java.util.Date还多了一个纳秒。
这3个类分别对应数据库的3种数据类型:
- java.sql.Date 日期(只包括年月日)
- java.sql.Time 时间(只包括时分秒)
- java.sql.Timestamp 日期/时间(包括年月日,时分秒,还有毫秒和纳秒)
二、时间类型相互转换
2.1 java.util.Date→java.sql.Date
领域对象(domain)中的所有属性不能出现java.sql包下的东西!即不能使用java.sql.Date;我们在执行insert、update、delete操作时,需要把domain中的util的Date转换成sql的Date。这时需要使用数据库三种时间类型的构造器。java.sql包下的Date、Time、TimeStamp三个类的构造器都需要一个long类型的参数,表示毫秒值。创建这三个类型的对象,只需要有毫秒值即可。我们知道java.util.Date有getTime()方法可以获取毫秒值,那么这个转换也就不是什么问题了。
java.utl.Date d = new java.util.Date();
java.sql.Date date = new java.sql.Date(d.getTime());//会丢失时分秒
Time time = new Time(d.getTime());//会丢失年月日
Timestamp timestamp = new Timestamp(d.getTime());
2.2 java.sql.Date→java.util.Date
把数据库的三种时间类型赋给java.util.Date,基本不用转换,因为java.sql.Date、java.sql.Time、java.sql.Timestamp这三个类都是java.util.Date的子类,这是把子类对象给父类的引用,所以不需要转换。
java.sql.Date date = …
java.util.Date d = date; java.sql.Time time = …
java.util.Date d = time; java.sql.Timestamp timestamp = …
java.util.Date d = timestamp;
三、案例演示
创建一个dt表:
CREATE TABLE dt(
d DATE,
t TIME,
ts TIMESTAMP
)
向dt表中插入数据:
@Test
public void fun3() throws SQLException {
Connection connection = JdbcUtils.getConnection();
String sql = "insert into dt value(?,?,?)";
PreparedStatement pstmt = connection.prepareStatement(sql); Date date = new Date(); //此处的date为java.util.Date
pstmt.setDate(1, new java.sql.Date(date.getTime()));
pstmt.setTime(2, new Time(date.getTime()));
pstmt.setTimestamp(3, new Timestamp(date.getTime()));
pstmt.executeUpdate();
}
从dt表中查询数据:
@Test
public void fun4() throws SQLException {
Connection connection = JdbcUtils.getConnection();
String sql = "select * from dt";
PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
java.util.Date date1 = rs.getDate(1);
java.util.Date date2 = rs.getTime(2);
java.util.Date date3 = rs.getTimestamp(3); System.out.println(date1);
System.out.println(date2);
System.out.println(date3);
}
}
JavaWeb学习笔记(十三)—— JDBC时间类型的处理的更多相关文章
- Javaweb学习笔记7—JDBC技术
今天来讲javaweb的第7阶段学习. JDBC技术,关于JDBC本篇博客只介绍了它的一部分,后面博客会更加深入探讨. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的 ...
- 10.3(Java学习笔记)JDBC时间操作
一.时间分类 数据库 java类 Date ---- java.sql.Date 表示日期 yyyy-MM--dd (年月日) Time ----java.sql.Time 表示 ...
- (转)JavaWeb学习总结(十三)——使用Session防止表单重复提交
如何防止表单重复提交 在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复 ...
- java之jvm学习笔记十三(jvm基本结构)
java之jvm学习笔记十三(jvm基本结构) 这一节,主要来学习jvm的基本结构,也就是概述.说是概述,内容很多,而且概念量也很大,不过关于概念方面,你不用担心,我完全有信心,让概念在你的脑子里变成 ...
- JavaWeb学习笔记总结 目录篇
JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- Go语言学习笔记十三: Map集合
Go语言学习笔记十三: Map集合 Map在每种语言中基本都有,Java中是属于集合类Map,其包括HashMap, TreeMap等.而Python语言直接就属于一种类型,写法上比Java还简单. ...
- javaweb学习笔记整理补课
javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...
- python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息,抓取政府网新闻内容
python3.4学习笔记(十三) 网络爬虫实例代码,使用pyspider抓取多牛投资吧里面的文章信息PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI,采用Python语言编写 ...
随机推荐
- 使用Nuget发布自己的类库包
NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通过NuGet来安装一些V ...
- 2014年Linux 和开源技术回顾盘点
ZDNet科技观察家StevenJ.Vaughan-Nichols在年终发表了对Linux和开源技术这一年跌宕起伏的总结,细数这一年中的惊喜和不堪. 2014Linux之殇 “心脏出血(Heartbl ...
- github如何上传代码
别人写的太好了,没必要重写.备份给自己参看. 1.https://www.cnblogs.com/zlxbky/p/7727895.html 2.https://blog.csdn.net/pql92 ...
- GO程序设计2——面向过程基础知识
1 简介 GO语言google开发的新语言.有如下特性: 自动垃圾回收.更丰富的内置数据类型.函数多返回值.错误处理.匿名函数和闭包.类型和接口.并发编程.反射.多语言混合编程 package mai ...
- php系统常量
(1)__FILE__ :php程序文件名.它可以帮助我们获取当前文件在服务器的物理位置. (2)__LINE__ :PHP程序文件行数.它可以告诉我们,当前代码在第几行. (3)PHP_VERSIO ...
- Windows7下使用sphinx生成开源文档(原)
作者这里以osgearth文档为例,感觉这种生成文档的方式比较好,生成的html文档是支持搜索的,感谢开源工作者的奉献.赞一个 1. 下载并安装python for windows:https://w ...
- 希尔伯特空间(Hilbert Space)是什么?
希尔伯特空间是老希在解决无穷维线性方程组时提出的概念, 原来的线性代数理论都是基于有限维欧几里得空间的, 无法适用, 这迫使老希去思考无穷维欧几里得空间, 也就是无穷序列空间的性质. 大家知道, 在一 ...
- JAVA自动装箱拆箱与常量池
java 自动装箱与拆箱 这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的 ...
- whereis libjpeg.so.7
在服务器上调用import ImageFont时报如下错误 ImportError: The _imagingft C module is not installed (服务器为Centos5.5, ...
- python中的os模块几个常用的方法
os.getcwd() 得到当前工作目录,即当前python脚本工作的目录路径 os.remove(file):删除一个文件 os.mkdir(name):创建目录 os.path.exists(na ...