ArrayList总是添加相同的Element
2015-12-03 14:04
387 查看
最近状态不好啊,总是晕晕的,写的东西出了问题,艾玛好桑心。
错误:之前把下面msg的定义放循环外面了,然后每次添加到m里的都是查到的最后一个Message。
对于基本类型是值传递,非基本类型传的是引用。如果不每次new一个对象,则每次都是把同一个引用放进去,而这些引用都指向相同的对象,所以放进去的值都相同,就都是最后一次修改的值了。
<span style="white-space:pre"> </span> ArrayList<Message> m = new ArrayList<Message>();
另外,数据库中放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字段默认值查询时的处理方式,它默认是抛出异常的。
错误:之前把下面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字段默认值查询时的处理方式,它默认是抛出异常的。
相关文章推荐
- 获取进程号并赋值判断进程状态
- 【转载】Android样式的开发:selector篇
- super和this的用法JAVA
- 在安装Android Studio之后,启动时报错:Argument for @NotNull parameter 'name' of com/android/tools/idea/
- Android Studio failed to find build tools revision 19.1.0 问题
- 前端模板
- Mac终端Terminal的光标快捷键
- UVA10391-复合词
- 成为JavaGC专家(1)—深入浅出Java垃圾回收机制
- [资料]mysql实现地理位置搜索
- 微信、陌陌 架构方案分析
- 返回函数和闭包
- SQL 注入有病,安全专家有何良方?
- 测试mysql数据库驱动及安装教程
- iOS 旋转动画(图片360°旋转)关键代码
- [置顶] servlet的生命周期
- 关于radio checkbox select的值的选中和取值的问题
- Tomcat启用用户名密码
- Cocos2D中Node的userObject实例变量使用时一个要注意的地方
- pg_xlog目录下文件数量