加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

jsp页面上读取数据库datetime时间显示问题(备忘用)

(2012-11-16 15:50:51)
标签:

jsp

数据库

时间

datetime

timestamp

分类: java学习日记

    我是个java web 初学者。

    买了本javaweb 程序设计与项目实践

 

    学到servlet那章,正好有个综合的小练习,就是作一个web项目能往数据库里添加数据,还能显示数据库里的内容。

 

    估计很多人做过,就是那个commodity。

 

    我用的是myeclipse10+tomcat7+sqlserver2005(一开始用mysql,但是报了个java班,讲的是sqlserver,就改了)

 

    我把那个程序和数据库都改良了一下,然后遇到了困扰了我半个月的一个问题

虽然现在已经解决了,回头看看图森破,但是当时的确是弄不出来啊,卡住了……

 

    好了,往下说

 

首先,数据库方面:

commodity中的列

id      int

name    varchar

price   float

agio    float

 

注意下面我又加了几列

inputTime  datetime  ----  这个是保存创建记录时的时间的

updateTime datetime  ----  这个是保存记录修改时的时间的

picFolder  varchar   ----  这个是预设保存对应商品照片的地址字符串的(这个先不管,主要是上面两个)

 

在Commodity.java中定义接收数据的变量

int id;   String name;   double price;   double agio;

 

我用java.sql.Date 来声名inputTime和updateTime两个变量,用于对应的数据库列

 

然后在CommodityDAOImp1中有个查询全部的方法

public List<Commodity> findAllCommodity()

{

   Connection conn=DBConnection.getConnection();

   List<Commodity> commodityList=new ArrayList<Commodity>();

   String searchAll="select * from commodity";

   PreparedStatement pstmt=null;

   try

   {

     pstmt=conn.prepareStatement(searchAll);

     ResultSet rs=pstmt.executeQuery();

     while(rs.next())
   {
    Commodity commodity=new Commodity();
    commodity.setId(rs.getInt(1));
    commodity.setName(rs.getString(2));
    commodity.setPrice(rs.getDouble(3));
    commodity.setAgio(rs.getDouble(4));
    commodity.setInputTime(rs.getDate(5));
    commodity.setUpdateTime(rs.getDate(6));
    commodity.setPicFolder(rs.getString(7));
    commodityList.add(commodity);
   }……下面那些catch finally就不写了

 

    这样都弄完了之后,远转正常,但是在显示数据库列表那页里,inputTime和updateTime两列只显示日期没有时间,如:2012-11-16,后面的时分秒没有

上网搜了半天,找到一个办法

 

<fmt:formatDate type="both" value="${inputTime}"/>

 

    好了,时间显示出来了,但是都是0:00:00

    一查数据库,数据里的时间没问题啊

 

    半个月之后的今天,终于知道,原来问题出在rs.getDate(5)上,这个方法就是只取日期,不取时间(小括号里的5是指数据库中表commodity的第5列)

 

    然后看网上有人提供的方法是rs.getDate(5)+rs.getTime(5)

但是这样问题又来了,这两个相加可就不是Date型了,但可以赋值给String

于是又回去把Commodity.java里的inputTime和updateTime两个变量改成String,还有相应的getter setter还有其它一些相关的,然后显示就正常了,年月日,时分秒

 

但是觉的还是麻烦,于是就尝试一下

 

就把Commodity.java里的两个变量改成Timestamp型(及相关需改处)

 

import java.sql.*;

……

private Timestamp inputTime; private Timestamp updateTime;……

 

    结果真的可以直接接收数据库里的datetime,而且直接在网页中显示也是全的时间即${inputTime}就行

    然后再对其格式化一下

 

<fmt:formatDate value="${inputTime}" pattern="yyyy年mm月dd日 hh:mm:ss"/>

 

    好,问题又来了,发现月份数字显示的不对,都超过12了,怎么回事?

    原来月分的mm必须大写,小写的话显示的是分钟数,同理,分钟数也必须小写,大写就是月份(MS是基本常识,但是俺今天才知道,-_-!)

    然后就是hh,变成大写HH就是24小时制

 

    到此,自己预期的程序完成

    困扰了半个月啊,其实挺简单的一个问题

    其实弄这个时还有其它问题,再写别的博文再说吧(怎么也不可能半个月只这一个问题http://www/uc/myshow/blog/misc/gif/E___6725EN00SIGG.gif

    可以暂时歇会儿了

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有