我是个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)
可以暂时歇会儿了
加载中,请稍候......