java.sql.Date to java.util.Date

  发这篇博文的题目可能无法直接表示内容,但是确实是java.sql.Date和java.util.Date.

  今天在使用‘net.sf.json.JSONObject‘封装json数据的时候,碰到很奇怪的问题,报出的异常,让我开始觉得,不知道从哪个异常开始找解决方案,报错如下:

一月 30, 2015 11:14:49 上午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [spt.servlet.JsonServlet] in context with path [/ServerAQI] threw exception
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
	at net.sf.json.JSONObject._fromBean(JSONObject.java:953)
	at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
	at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
	at net.sf.json.JSONObject._setInternal(JSONObject.java:2798)
	at net.sf.json.JSONObject.setValue(JSONObject.java:1507)
	at net.sf.json.JSONObject._fromBean(JSONObject.java:940)
	at net.sf.json.JSONObject.fromObject(JSONObject.java:192)
	at net.sf.json.JSONObject._processValue(JSONObject.java:2774)
	at net.sf.json.JSONObject.processValue(JSONObject.java:2833)
	at net.sf.json.JSONObject.element(JSONObject.java:1871)
	at net.sf.json.JSONObject.element(JSONObject.java:1849)
	at net.sf.json.JSONObject.put(JSONObject.java:2466)
	at spt.service.JsonService.getJsonStr(JsonService.java:12)
	at spt.servlet.JsonServlet.doPost(JsonServlet.java:34)
	at spt.servlet.JsonServlet.doGet(JsonServlet.java:53)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at spt.servlet.filter.EncodingFilter.doFilter(EncodingFilter.java:24)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1773)
	at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1132)
	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
	at net.sf.json.JSONObject._fromBean(JSONObject.java:928)
	... 40 more
Caused by: java.lang.IllegalArgumentException
	at java.sql.Date.getHours(Date.java:182)
	... 50 more

  通常,我们有两种思路找解决方案:从我们自定义类中开始找错.

  这种思路是我在网上看教程视频,一个讲师说的,蛮实用的.但是一开始的时候,我并没有这样做(其实我应该这样做).我先是查 ‘java.lang.IllegalArgumentException java.sql.Date.getHours),发现有个哥们写的一大篇中文,但觉得他说的都不怎么对.

  又一次觉得 stackoverflow上的哥们真的很厉害.

  我们知道,java.sql.Date是java.util.Date的子类,所以我们无需显示将java.sql.Date转换为java.util.Date.

  在jdbc中,使用PreparedStatement往数据库中存储date的时候,我们需要将java.util.Date转换为java.sql.Date.

  java.sql.Date在数据库中存储的是不带time部分的,所以将java.sql.Date转换为java.util.Date的时候,应该使用 ResultSet..getTimestamp("currentDate"), 而不能让其隐式转换(ref:Converting java.sql.Date to java.util.Date)

当我使用ResultSet..getTimestamp("currentDate")将java.sql.Date转换为java.util.Date的时候,就能将json数据正常封装了.

时间: 2024-10-10 17:31:34

java.sql.Date to java.util.Date的相关文章

java.util.Date 和Java.sql.Date、java.sql.Time、java.sql.Timestamp的互换

1.sql时间类型转util时间类型 原理:java.sql.Date.java.sql.Time.java.sql.Timestamp三个类都是java.util.Date的子类,故根据多态的设计原理,父类引用指向子类对象,可以直接转换. 即: java.util.Date uDate = new java.sql.Date(0); 或: java.util.Date uDate = new java.sql.Time(0); 或: java.util.Date uDate = new jav

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结 转

java.util.Date.java.sql.Date.java.sql.Time.java.sql.Timestamp区别和总结 java.lang.Object ....|__java.util.Date ..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time [父类]java.util.Date日期格式为:年月日时分秒 [子类]java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据] [子类]java.

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系

参考:链接 在Web开发中,避免不了对日期的操作,常用的关于时间的类有这么几个: java.util.Date.java.sql.Date.java.sql.Time.java.sql.Timestamp,这几个类在JDK的定义如下所示: java.lang.Object -.|__java.util.Date ---.|__java.sql.Date/java.sql.Timestamp/java.sql.Time -.|__java.security.Timestamp java.util.

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结

final SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);//dd/MM/yyyy final Date now = new Date(); System.out.println(now); final String strDate = sdfDate.format(now); System.out.println(strDate); final Timesta

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

java.sql.Date.java.sql.Timestamp区别和总结 java.lang.Object ....|__java.sql.Date/java.sql.Time [父类]java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据] [子类]java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒) 针对不同的数据库选用不同的日期类型 ·Oracle的Date类型,只需要年月日,选择使用java.sql.Timestamp类型 ----------

解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题

在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中,发布的接口的入参有些类型支持不是很好,比如Timestamp和Map.这个时候我们就需要编写一些适配来实行类型转换. TimestampAdapter.java package com.loongtao.general.crawler.webservice.utils; import java.s

java中时间类(util Date)的后延与前推处理

当后延或者前推的天数在一定时间之内时,可以用以下方法处理 public static Date  getValidEndTime(Date date,int validDayCount){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String datestr = sdf.format(date); try { date = sdf.parse(datestr); } catch (ParseException

java.sql.preparedstatement和java.sql.statement的区别

本文转自CSDN,然后整理了一遍.原文出处:CSDN JDBC(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发者付出大量的时间和精力.在使用statement获取JDBC访问时所具有的一个共通的问题是输入适当格式的日期和时间戳:2002-02-0520:56 或者 02/05/02 8:56 pm. 通过使用java.sql.preparedstatement,这个问题可以自动解决.一个prep

java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

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.util.Date与java.sql.Date

我数据库里用到了日期类型.用java编程的时候同时import了java.util.*和java.sql.*,发现直接申明Date类型 Date dt; 会报错,查了一下才发现有java.util.Date和java.sql.Date,在定义日期类型的时候要使用全名,就是像这样: java.util.Date udt; java.sql.Date sdt; 然后我就查java.util.Date和java.sql.Date的区别和用法,这方面网上资料挺全,我就不赘述了,大致区别就是java.ut