如何存储java.util.Date到mysql中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何存储java.util.Date到mysql中相关的知识,希望对你有一定的参考价值。

Error setting expression 'employee.begin_work_time' with value '[Ljava.lang.String;@ee8874'
ognl.MethodFailedException: Method "setBegin_work_time" failed for object com.licw.javabean.Employee@5353c8 [java.lang.NoSuchMethodException: com.licw.javabean.Employee.setBegin_work_time([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)
at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.ASTChain.setValueBody(ASTChain.java:227)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:209)
at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:173)
at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:160)
我是新手,希望各位大侠能说的详细些,谢谢了

参考技术A ,即java.util.Date的getTime() 方法,得到毫秒值,然后用java.sql.Timestamp 的构造方法,构造一个java.sql.Timestamp对象
java.sql.Timestamp newdate=new java.sql.Timestamp(olddate.getTime());
ps.setTimestamp(i++, newdate);

当我通过 JSON 获取输入时,如何在 Ibatis 中将 java.util.Date 映射到 MySql Date

【中文标题】当我通过 JSON 获取输入时,如何在 Ibatis 中将 java.util.Date 映射到 MySql Date【英文标题】:how to map java.util.Date to MySql Date in Ibatis when I take input through JSON 【发布时间】:2012-02-08 17:22:00 【问题描述】:

我使用 JSON 将出生日期作为输入

"dateOfBirth":"1973-08-26"

该字段存在于Person.java 类中

import java.util.Date;

public class Person 

    Date dateOfBirth;

    //Some other fields

    public void setDateOfBirth(Date dateOfBirth) 

         this.dateOfBirth = dateOfBirth;
       

   public Date getDateOfBirth() 

        return dateOfBirth;
       
   

这被映射到 mysql 数据库中的 person 表。 我正在像这样查询数据库:

entityId = (Long) session.selectOne("ValidatePerson", registerUserRequestParams);

以下是我在 mapper.xml 中所做的条目

<select id="ValidatePerson" parameterMap="ValidatePersonMap" resultType="long">
    select person.entityId
    from person
    where 
                //Some other Validation checks
        <if test="dateOfBirth != null">
        and person.dateOfBirth = #dateOfBirth
         </if>
        );
</select>

我有一个参数地图

<parameterMap id="ValidatePersonMap" type="java.util.HashMap">
     <parameter property="dateOfBirth" javaType="java.util.Date" jdbcType="DATE"  mode="IN"/>
</parameterMap>

我无法从数据库中获取任何结果。即使值存在,它也不会选择任何行。我已检查其他验证检查均未失败。如果我在 JSON 中将 dateOfBirth 作为 null 传递,那么我会得到结果。

我也写了一个测试用例和设置请求如下:

Date dob = new Date(73,7,26);
request.setDateOfBirth(dob);

如上所述,当我从测试用例中传递值时,我会从数据库中获取结果。 只有当我使用 json 获取请求参数时才会出现问题。

JSOn的格式和DB中存储的格式是一样的 我的一个解决方法是手动将 java.util.Date 转换为上述格式的字符串并将其作为字符串传递。但这是一种非常糟糕的方法,客户不会喜欢它。

【问题讨论】:

阅读此***.com/a/2306051/579580 【参考方案1】:

使用Timestamp。考虑Joda time plug。 ...并阅读this 的答案。

这三个绝对会变魔术。

祝你好运!

【讨论】:

【参考方案2】:

您是否尝试过格式化 java 日期。也许格式不同,所以 JSON 和存储在数据库中的格式不匹配?

【讨论】:

JSON 和 DB 中的格式是一样的...这个 JSON 是使用 gson 库生成的...【参考方案3】:

这对我有用:

mysql 属性类型为Timestamp 我在 Java 中格式化 JSON 的日期,如下所示:

Date d = new Date();
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
String sd = sdf.format(d);
java.text.SimpleDateFormat sdf2 = new java.text.SimpleDateFormat("HH:MM:ss");
String fakeit =sd+"T"+sdf2.format(d);

然后我使用fakeit

【讨论】:

以上是关于如何存储java.util.Date到mysql中的主要内容,如果未能解决你的问题,请参考以下文章

mysql 存储 date , datetime问题,初步

在java.util.Date或java.sql.Date之间进行选择

不支持 java.util.Date

如何在 Json 中发送 java.util.Date?

java mysql datetime 是java 中啥类型

java如何获取当前时间插入数据库?