sql语句:select * from T_AccessControlledPC
在这个表中,有一个类型为datetime的列,但是数据为:0000-00-00 00:00:00
如果使用public List findPageBySql(final String sql,final Page page){
List list=hibernateTemp.executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createSQLQuery(sql);
query.setFirstResult(page.getBeginIndex());
query.setMaxResults(page.getEndIndex());
return query.list();
}
});
return list;
}方式查询没有问题
但是如果使用public int getCountBySql(String sql) {
int count = 0;
try {
SQLQuery query = super.getHibernateTemplate().getSessionFactory()
.getCurrentSession().createSQLQuery(sql);
count = query.list().size();
} catch (Exception e) {
count = 0;
System.out.println("查询数据失败 = " + sql);
e.printStackTrace();
}
return count;
}就会出现如下异常:
java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP.
,我不明白为什么会这样,是不是hibernate在查询时,会将查询结果帮我转换为Date类型,他一转肯定报错了,可是上面那种又不会出错,这两种到底有什么区别,求个高手指点下,谢谢
在这个表中,有一个类型为datetime的列,但是数据为:0000-00-00 00:00:00
如果使用public List findPageBySql(final String sql,final Page page){
List list=hibernateTemp.executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Query query = session.createSQLQuery(sql);
query.setFirstResult(page.getBeginIndex());
query.setMaxResults(page.getEndIndex());
return query.list();
}
});
return list;
}方式查询没有问题
但是如果使用public int getCountBySql(String sql) {
int count = 0;
try {
SQLQuery query = super.getHibernateTemplate().getSessionFactory()
.getCurrentSession().createSQLQuery(sql);
count = query.list().size();
} catch (Exception e) {
count = 0;
System.out.println("查询数据失败 = " + sql);
e.printStackTrace();
}
return count;
}就会出现如下异常:
java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 10 to TIMESTAMP.
,我不明白为什么会这样,是不是hibernate在查询时,会将查询结果帮我转换为Date类型,他一转肯定报错了,可是上面那种又不会出错,这两种到底有什么区别,求个高手指点下,谢谢
解决方案 »
- 关于页面中树形节点导航的功能的实现
- Ext grid 在IE6 表头不正常显示是什么问题呀?
- 工作流
- 分析 spring , hibernate
- 请教一个Hebernate错误,帮帮忙
- hibernate出错,org.hibernate.MappingException: Unknown entity: com.yourcompany.struts.form.UserNameForm
- jsp checkbox提交后如何保留原先的值显示在原来的jsp文件中
- bean管理和容器管理有什么区别?
- java程序中有的内存不能被垃圾处理器及时处理,这个问题我怎么解决,绝对给高分
- solr 分组查询 求和
- session覆盖问题
- 不明白为何要用基本只有getset的entity对象
java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 3 to TIMESTAMP
使用的是5.1的JDBC驱动,参考了官方文档,说'0000-00-00 00:00:00'在java中无法可靠的表示,Connector/J 3.1中就会抛出这个异常,看来5.1的版本中也没有解决这个问题,杯具。
查了一下表,该字段的默认值确实定义为'0000-00-00 00:00:00',在select这个字段的时候就会报错,没办法,只有去掉了默认值,把该时间字段为空,这样java就不会抛异常了。
如果时间字段因特殊需要必须为0时,可以使用另一个解决方法,修改JDBC连接参数:
jdbc:mysql://ip:port/dbname?zeroDateTimeBehavior=convertToNull
将0转换为null。
最后没有异常了,可以结贴了!