您的位置:首页 > 其它

ArrayList总是添加相同的Element

2015-12-03 14:04 387 查看
最近状态不好啊,总是晕晕的,写的东西出了问题,艾玛好桑心。

     错误:之前把下面msg的定义放循环外面了,然后每次添加到m里的都是查到的最后一个Message。

     对于基本类型是值传递,非基本类型传的是引用。如果不每次new一个对象,则每次都是把同一个引用放进去,而这些引用都指向相同的对象,所以放进去的值都相同,就都是最后一次修改的值了。

<span style="white-space:pre"> </span> ArrayList<Message> m = new ArrayList<Message>();
<span style="white-space:pre">		</span>       while(item.hasNext()){
pstmt.setLong(1, gid = item.next());
res = pstmt.executeQuery();
while(res.next()){
<span style="color:#ff6600;">Message msg = new Message();</span>
msg.setMessageid(res.getLong("messageid"));
msg.setMessagetitle(res.getString("messagetitle"));
msg.setContentid(res.getLong("contentid"));
msg.setCreatetime(res.getTimestamp("createtime"));
msg.setDeletetime(res.getTimestamp("deletetime"));
msg.setGroupid(gid);
msg.setIscomment(res.getBoolean("iscomment"));
msg.setIsremind(res.getBoolean("isremind"));
msg.setRemindtime(res.getTimestamp("remindtime"));
msg.setIsvalue(res.getBoolean("isvalue"));
m.add(msg);
}
}

另外,数据库中放createtime字段是timestamp类型的默认值值为CURRENT_TIMESTAMP,modle中的Message类的createtime是java.uitl.Date。

而deletetime的默认值为'0000-00-00 00:00:00',运行有如下异常:

Cause: java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
; SQL []; Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp; nested exception is java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

解决办法是给jdbc url加上 zeroDateTimeBehavior参数:

datasource.url=jdbc:mysql://localhost:3306/MPS?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
zeroDateTimeBehavior=round是为了指定MySql中的DateTime字段默认值查询时的处理方式,它默认是抛出异常的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: