date数据存入mysql_Date对象存入mysql数据库

java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类)。

java.sql.Date是java.util.Date的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。 为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。

说白了,java.sql.Date就是与数据库Date相对应的一个类型,而java.util.Date是纯java的Date。

从类 java.util.Date 继承的方法

after, before, clone, compareTo, equals, getDate, getDay, getMonth, getTime, getTimezoneOffset, getYear, hashCode, parse, setDate, setMonth, setYear, toGMTString, toLocaleString, UTC

sql.Date也有时间的

如果不想用oracle的to_date函数,可以自己生成sql.Date对象

String s = "2012-06-21 00:10:00";

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

java.util.Date d1 = sdf.parse(s); //先把字符串转为util.Date对象

java.sql.Date d2 = new java.sql.Date(d1.getTime()); //再转换为sql.Date对象

想要将带时分秒的时间插入到数据库中,除了Oracle数据库的to_date()方法之外。我们可以用 Timestamp类来实现。java.sql.Date是规范化之后的时间,其时分秒部分被截取掉了。

java.sql.Date是为了配合SQL DATE而设置的数据类型。“规范化”的java.sql.Date只包含年月日信息,时分秒毫秒都会清零。格式类似:YYYY-MM-DD。当我们调用ResultSet的getDate()方法来获得返回值时,java程序会参照"规范"的java.sql.Date来格式化数据库中的数值。因此,如果数据库中存在的非规范化部分的信息将会被劫取。

在sun提供的ResultSet.java中这样对getDate进行注释的:

Retrieves the of the designated column in the current row of this ResultSet 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往往不是一个规范的java.sql.Date.要保存java.util.Date的精确值,

我们需要利用java.sql.Timestamp.

eg:

  String s="2012-01-02 03:12:21";

SimpleDateFormat sp = newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");

java.util.Date du = sp.parse(s);

java.sql.Timestamp st = newjava.sql.Timestamp(du.getTime());

把一个日期值写入数据库中,发现由java.util.Date转存为java.sql.Date后,只有年月日,没有了时分秒:

java.util.Date ud =newjava.util.Date();

java.sql.Date sd =newjava.sql.Date(ud.getTime());

这个可是不行的,用户至少要精确到分。由于java.sql.Date为了能够遵守sql日期标准,把所有时分秒都归了零。只有用Timestamp来进行保存,由于Timestamp是子类,因此写好的bean里面不需要修改数据类型。

pstmt.setTimestamp(15,newjava.sql.Timestamp(Calendar.getInstance().getTime().getTime()));//当前时间

pstmt.setTimestamp(16,newjava.sql.Timestamp(userFile.getCreateTime().getTime()));//指定时间

对于指定时间还可以用Calendar类的setTime()方法来设置

Calendar cal = Calendar.getInstance();

System.out.println(cal.getTime().getTime());

String string="2012-01-01 01:02:03";

SimpleDateFormat sp = newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");

java.util.Date da = sp.parse(string);

cal.setTime(da);

System.out.println(cal.getTime().getTime());

在数据库中插入带时分秒的时间需要用Timestamp。一般做这种操作用框架居多,我就说一下Hibernate吧。在数据库表中字段类型设置为Date数据类型,代码中映射的字段类型设置为 Timestamp类型, private Timestamp date;  在映射文件中 Type也是时间戳类型的。在赋值取值的时候用前面的操作获取到需要的时间的时间戳对象直接赋值就行。然后就可以用Hibernate执行方法将带时分秒的时间存入到数据库里了。(不过这一点意义好像不是很大,大多都是直接varchar2存进去,取时候再to_date一下或者在代码里处理)

还需要说一点的就是

在使用SimpleDateFormat时格式化时间的 yyyy.MM.dd 为年月日而如果希望格式化时间为12小时制的,则使用hh:mm:ss如果希望格式化时间为24小时制的,则使用HH:mm:ss,上代码:

SimpleDateFormat ss =newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制

SimpleDateFormat sdformat =newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制

Date d =newDate();

SimpleDateFormat ss = newSimpleDateFormat("yyyy-MM-dd hh:mm:ss");//12小时制

System.out.println(ss.format(d));

Date date = newDate();

SimpleDateFormat sdformat = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制

String LgTime = sdformat.format(date);

System.out.println(LgTime);

结果为

2008-05-2801:32:54

2008-05-2813:32:54

Date类,已经很少用了。更多使用的是Calendar

Calendar    date    =    Calendar.getInstance();

date.get(Calendar.HOUR_OF_DAY    );//得到24小时机制的

date.get(Calendar.HOUR);//    得到12小时机制的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/388832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盛严谨,严谨,再严谨。_评估员工调查的统计严谨性

盛严谨,严谨,再严谨。The human resources industry relies heavily on a wide range of assessments to support its functions. In fact, to ensure unbiased and fair hiring practices the US department of labor maintains a set of guidelines (Uniform Guidelines) to …

复权就是对股价和成交量进行权息修

* 所谓复权就是对股价和成交量进行权息修复,按照股票的实际涨跌绘制股价走势图, * 并把成交量调整为相同的股本口径。股票除权、除息之后,股价随之产生了变化, * 但实际成本并没有变化。 * 如:原来20元的股票,十送十之…

前端校验和后端校验

问:到底是前端校验好还是后端校验好呢? 答:后端校验比前端校验更安全,更可靠,前端校验可以增加用户体验,一般来说,在前端校验的东西在后端也必须校验(比如登陆用户名、密码&#xff…

[MySQL] INFORMATION_SCHEMA 数据库包含所有表的字段

sql注入后可以通过该数据库获取所有表的字段信息1. COLLATIONS表 提供有关每个字符集的排序规则的信息。 COLLATIONS表包含以下列:COLLATION_NAME 排序规则名称。 CHARACTER_SET_NAME 与排序规则关联的字符集的名称。 ID 排序规则ID。 IS_DEFAULT 排序规则是否为其字…

开根号的笔算算法图解_一个数的开根号怎么计算

一个数的开根号怎么计算2020-11-08 15:46:47文/钟诗贺带根号的式子可以直接进行开平方的运算。一些特殊的根号运算有;√2≈1.414、1/2-√3≈0.5-1.732≈-1.232、2√5≈22.236≈4.236、√7-√6≈2.646-2.449≈0.197。开平方的笔算方法1.将被开方数的整数部分从个位起…

arima 预测模型_预测未来:学习使用Arima模型进行预测

arima 预测模型XTS对象 (XTS Objects) If you’re not using XTS objects to perform your forecasting in R, then you are likely missing out! The major benefits that we’ll explore throughout are that these objects are a lot easier to work with when it comes to …

net程序员的iPhone开发-MonoTouch

net程序员的iPhone开发-MonoTouch iPhone软件的Native开发除了使用Apple推荐的Objective-C Cocoa之外,也有其他的一些工具和SDK提供 基于WEB的形式的一些框架在下面这个文章介绍过 各种SmartPhone上的跨平台开源框架的总结 http://www.cnblogs.com/2018/archive/20…

ASP防止SQL注入

防止SQL注入http://0.0.0.0/bzhs/login.asp?logTypeedit;WAITFOR DELAY 0:0:5 --logType Replace(Replace(Replace(Replace(logType,"-",""),"",""),"&",""),";","")fcdm Replace(Rep…

protobuf java 生成_protobuf代码生成

windows :1,两个文件:proto.exe, protobuf-java-2.4.1.jar2,建立一个工程TestPb,在下面建立一个proto文件件,用来存放【。proto】文件3,将proto,exe放在工程下,4,建立一个msg.proto文件:option …

bigquery_在BigQuery中链接多个SQL查询

bigqueryBigquery is a fantastic tool! It lets you do really powerful analytics works all using SQL like syntax.Bigquery是一个很棒的工具! 它使您能够使用像语法一样SQL来进行真正强大的分析工作。 But it lacks chaining the SQL queries. We cannot run …

允许指定IP访问远程桌面

允许指定IP访问远程桌面 电脑软件 2010-01-23 02:33:40 阅读595 评论0 字号:大 中 小 订阅 一、新建IP安全策略 WINR打开运行对话框,输入gpedit.msc进入组策略编辑器。 依次打开“本地计算机”策略--计算机配置--Windows设置--安全设置--IP安…

大理石在哪儿 (Where is the Marble?,UVa 10474)

题目描述&#xff1a;算法竞赛入门经典例题5-1 1 #include <iostream>2 #include <algorithm>3 using namespace std;4 int maxn 10000 ;5 int main()6 {7 int n,q,a[maxn] ,k0;8 while(scanf("%d%d",&n,&q)2 && n &&q…

Volley 源码解析之网络请求

Volley源码分析三部曲Volley 源码解析之网络请求Volley 源码解析之图片请求Volley 源码解析之缓存机制 Volley 是 Google 推出的一款网络通信框架&#xff0c;非常适合数据量小、通信频繁的网络请求&#xff0c;支持并发、缓存和容易扩展、调试等&#xff1b;不过不太适合下载大…

为什么修改了ie级别里的activex控件为启用后,还是无法下载,显示还是ie级别设置太高?

如果下载插件时下载不了&#xff0c;这样设置&#xff0c;打开IE选工具/Internet 选项/安全/自定义级别/设置中的ActiveX控件自动提示“禁用”。 对标记为可安全执行脚本ActiveX控件执行脚本“启用” 对没有标记为安全的ActiveX初始化和脚本运行“启用”&#xff08;下载插件后…

mysql 迁移到tidb_通过从MySQL迁移到TiDB来水平扩展Hive Metastore数据库

mysql 迁移到tidbIndustry: Knowledge Sharing行业&#xff1a;知识共享 Author: Mengyu Hu (Platform Engineer at Zhihu)作者&#xff1a;胡梦瑜(Zhhu的平台工程师) Zhihu which means “Do you know?” in classical Chinese, is the Quora of China: a question-and-ans…

两个日期相差月份 java_Java获取两个指定日期之间的所有月份

String y1 "2016-02";//开始时间String y2 "2019-12";//结束时间try{Date startDate new SimpleDateFormat("yyyy-MM").parse(y1);Date endDate new SimpleDateFormat("yyyy-MM").parse(y2);Calendar calendarCalendar.getInstance(…

js前端日期格式化处理

js前端日期格式化处理 1.项目中时间返回值&#xff0c;很过时候为毫秒值&#xff0c;我们需要转换成 能够看懂的时间的格式&#xff1b; 例如&#xff1a; ​ yyyy-MM-dd HH:mm:ss 2.处理方法&#xff08;处理方法有多种&#xff0c;可以传值到前端处理&#xff0c;也可以后台可…

如何用sysbench做好IO性能测试

sysbench 是一个非常经典的综合性能测试工具&#xff0c;通常都用它来做数据库的性能压测&#xff0c;但也可以用来做CPU&#xff0c;IO的性能测试。而对于IO测试&#xff0c;不是很推荐sysbench&#xff0c;倒不是说它有错误&#xff0c;工具本身没有任何问题&#xff0c;它的…

XCode、Objective-C、Cocoa 说的是几样东西

大部分有一点其他平台开发基础的初学者看到XCode&#xff0c;第一感想是磨拳擦掌&#xff0c;看到 Interface Builder之后&#xff0c;第一感想是跃跃欲试&#xff0c;而看到Objective-C的语法&#xff0c;第一感想就变成就望而却步了。好吧&#xff0c;我是在说我自己。 如果…

java http2_探索HTTP/2: HTTP 2协议简述(原)

探索HTTP/2: HTTP/2协议简述HTTP/2的协议包含着两个RFC&#xff1a;Hypertext Transfer Protocol Version 2 (RFC7540)&#xff0c;即HTTP/2&#xff1b;HPACK: Header Compression for HTTP/2 (RFC7541)&#xff0c;即HPACK。RFC7540描述了HTTP/2的语义&#xff0c;RFC7541则描…