学习:解决Java中Date与Oracle中Date的CRUD问题(使用hql进行CRUD)

最近做一个SSH的练习,其中使用了Oracle,再对Date类型的字段进行处理时,遇到了很多涉及日期转换的问题,现给出解决方案,给各位读者一个参考。

参考文章:Oracle数据库以date类型保存日期时,Java中用哪个类对应数据库的date类型?

解决Java中Date与Oracle中Date的CRUD问题

问题概述:前台需要显示为(yyyyMMdd),Oracle中字段为Date类型,默认为(yyyyMMdd)。当进行更新、插入时,需要将前台传入的String类型(yyyyMMdd)的日期插入Oracle。
**解决方案:**Oracle使用Date字段类型,java中实体使用java.util.Date类型字段。

一、效果:

这里写图片描述

图1.1 显示信息页

这里写图片描述

图1.2 控制台显示

ps:
1、在控制台调试可以输出yyyyMMdd,但是页面上显示格式存在一点问题;
2、设置了order by id asc,但是页面不生效。知道如何解决的各位大大,望赐教!
这里写图片描述
图1.3 使用datetimepicker控件的日期添加

二、数据库:

这里写图片描述

图2.1 BOOK表属性

这里写图片描述
图2.2 BOOK表记录

三、Entity

import java.util.Date;

public class Book {
    private int id;
    private String name;
    private String author;
    private String publish;
    private Date publishdate;
    private int page;
    private float price;
    private String content;

四、Book.hbm.xml

<hibernate-mapping package="com.it.ssh.entity">
    <class name="Book">
        <id name="id" type="int">
            <generator class="sequence">
                <param name="sequence">SEQ_BOOK</param>
            </generator>
        </id>
        <property name="name" type="string"></property>
        <property name="author" type="string"></property>
        <property name="publish" type="string"></property>
        <!--此处对应entity的类型-->
        <property name="publishdate" type="java.util.Date"></property>
        <property name="page" type="int"></property>
        <property name="price" type="float"></property>
        <property name="content" type="string"></property>
    </class>
</hibernate-mapping>

五、BookDaoImpl

        public List<Book> queryAll() {
        String hql="from Book order by id asc";
        Session session=sessionFactory.openSession();
        Query q=session.createQuery(hql);
        List<Book> list=q.list();
        <!--查询时,做了日期转换,将Oracle中Date转为了util类型-->
        <!--文末附日期转换类TimeTransform-->
        TimeTransform ts = new TimeTransform();
        for(Book b:list) {
        b.setPublishdate(ts.Stringtodate(ts.Datetostring(b.getPublishdate())));
        }
        session.close();
        return list;
    }

六、show.jsp

            <s:iterator value="list">  
            <tr>  
            <td align="center"><s:property value="id"/></td>
            <td align="center"><s:property value="name"/></td>  
            <td align="center"><s:property value="author"/></td>
            <td align="center"><s:property value="publish"/></td>   
            <!-- 为了格式化前台格式为yyyyMMdd,将标签换为s:date报错javaClassNotFound,将标签换为s:datetextfield时,报错stacktrace问题 -->
            <!-- 哪位读者知道如何格式为yyyyMMdd的话,望赐教! -->    
          <td align="center"><s:property value="publishdate" /></td>

            <td align="center"><s:property value="page"/></td>
            <td align="center"><s:property value="price"/></td>       
            <td align="center"><s:property value="content"/></td>       
            <td align="center">
            <a href="update.jsp?id=<s:property value='id'/>&name=<s:property value='name'/>&author=<s:property value='author'/>&publish=<s:property value='publish'/>&publishdate=<s:property value='publishdate'/>&page=<s:property value='page'/>&price=<s:property value='price'/>&content=<s:property value='content'/>">
            修改</a></td>
            <td align="center"><a href="bookAction!delete?id=<s:property value='id'/>">删除</a></td>
            </tr>  
        </s:iterator> 

七、日期转换类

import java.util.Date;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class TimeTransform {
    /**
     * String to date
     * @param stime
     * @return
     */
    public  static  java.sql.Date Stringtodate(String stime){

        SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd");
        //1.把字符串转换为util包的date
        java.util.Date utilDate = null;

        try {
            utilDate = format.parse(stime);
        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        //2.再把util包的date转换为sql包的date
        java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
        return sqlDate;
    } 
    /**
     * String to datetime
     * @param stime
     * @return
     */
    public  static Timestamp Stringtodatetime(String stime){
        SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //1.把字符串转换为util包的date
        java.util.Date utilDate = null;

        try {
            utilDate = format.parse(stime);

        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        //2.再把util包的date转换为sql包的date
         Timestamp ts = new Timestamp(utilDate.getTime());  


        return ts;
    } 
    /**
     * date to string
     * @param date
     * @return
     */
  public static String Datetostring(Date  date){
      SimpleDateFormat format =  new SimpleDateFormat("yyyy-MM-dd");
        //将data转换为string
        String sdate = format.format(date);
        return sdate;
  } 


}

猜你喜欢

转载自blog.csdn.net/qq_35206244/article/details/81476419