最近做一个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类型字段。
一、效果:
ps:
1、在控制台调试可以输出yyyyMMdd,但是页面上显示格式存在一点问题;
2、设置了order by id asc,但是页面不生效。知道如何解决的各位大大,望赐教!
二、数据库:
三、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;
}
}