Mysql中类型为DATE,Java中为java.util.Date,日期对比问题

1.遇到的问题

字段名为birthday,java中的类型为java.util.Date,数据库字段为DATE类型,传入一个日期(格式为"yyyy-MM-dd"),orderDate=#{orderDate}居然不相等????

解决方法:
添加jdbcType=DATE解决,where birthday=#{birthday,jdbcType=DATE}

代码如下:

    <select id="findCountByOrderDate" parameterType="java.util.Date" resultType="long">
        select count(*) from t_ordersetting where orderDate = #{orderDate,jdbcType=DATE}
    select>

Mysql中类型为DATE,Java中为java.util.Date,日期对比问题

 

2.Mybatis框架中jdbcType=“DATE” 和 jdbcType=“TIMESTAMP” 两种类型的区别

在连接数据库的时候,当jdbcType="DATE"类型时,返回的时间只有年月日(yyyy-MM-dd)的,当jdbcType=“TIMESTAMP”的时候,返回的时间是年月日和时分秒(yyyy-MM-dd HH:mm:ss)。

以绑定时间和解绑时间为例:
1.1当绑定时间的jdbcType=“DATE”,解绑时间的为jdbcType=“TIMESTAMP”,xml文件设置如下:
Mysql中类型为DATE,Java中为java.util.Date,日期对比问题_第1张图片

1.2最终查询到的数据类型是DATE的数据只有年月日(yyyy-MM-dd),而TIMESTAMP的年月日和时分秒都有(yyyy-MM-dd HH:mm:ss),如下展示:
Mysql中类型为DATE,Java中为java.util.Date,日期对比问题_第2张图片

Mybatis框架中jdbcType=“DATE” 和 jdbcType=“TIMESTAMP” 两种类型的区别

 

3.关于jdbc中的Date类型

首先,java这里有两个类型:
   java.sql.Date      java.util.Date

3.1两者的相互转换方法如下:

java.util.Date date = new java.util.Date();
java.sql.Date sqlDate=new java.sql.Date(date.getTime());

而且在jdbc Preparestatement中调用setDate( )方法给数据库中插入数据时,也是为java.sql.Date类型。

3.2分别获取当前时间:

java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
java.util.Date date = new java.util.Date();

3.3保存日期

在数据库中,若要保存如 2018-06-25 这种的日期格式,则可以将该字段定义为DATE类型;
若要保存如 2018-06-25 12:01:00 这种的日期格式,则可以将该字段定义为DATETIME类型;

  我在数据库(MySQL)中声明字段为datetime类型,如果要在java代码中向数据库插入数据,可使用TimeStamp对象:先创建java.util.Date对象,然后将其转换成TimeStamp对象(java.sql.Date对象不能保存时间,java.util.Date的可以)然后将TimeStamp对象插入数据库(TimeStamp继承自java.sql.Date,数据库中自动转换成DateTime)

java.util.Date date = new java.util.Date();          // 获取一个Date对象
Timestamp timeStamp = new Timestamp(date.getTime());     //   将日期时间转换为数据库中的
pstmt.setTimestamp(2, timeStamp);

  取出数据时,要使用rs.getTimestamp(“**”),自动转换成实体类中的java.util.Date

r.setUseTime(rs.getTimestamp("useTime"));//取出日期的为java.util.Date类型

另外:java.util.Date显示日期格式化方法:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String str = df.format(new Date());// new Date()为获取当前系统时间

关于jdbc中的Date类型

你可能感兴趣的:(java,mysql,开发语言)