解决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类型字段。

一、效果:

解决Java中Date与Oracle中Date的CRUD问题(使用hql进行CRUD)_第1张图片

图1.1 显示信息页

这里写图片描述

图1.2 控制台显示

ps:
1、在控制台调试可以输出yyyyMMdd,但是页面上显示格式存在一点问题;
2、设置了order by id asc,但是页面不生效。知道如何解决的各位大大,望赐教!
解决Java中Date与Oracle中Date的CRUD问题(使用hql进行CRUD)_第2张图片
图1.3 使用datetimepicker控件的日期添加

二、数据库:

解决Java中Date与Oracle中Date的CRUD问题(使用hql进行CRUD)_第3张图片

图2.1 BOOK表属性

解决Java中Date与Oracle中Date的CRUD问题(使用hql进行CRUD)_第4张图片
图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_BOOKparam>
            generator>
        id>
        <property name="name" type="string">property>
        <property name="author" type="string">property>
        <property name="publish" type="string">property>
        
        <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();
        
        
        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>   
            
                
          <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=&name=&author=&publish=&publishdate=&page=&price=&content=">
            修改a>td>
            <td align="center"><a href="bookAction!delete?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;
  } 


}

你可能感兴趣的:(解决方案)