对于以下代码片段,我收到以下给出的错误:
try {
cRows = new CachedRowSetImpl();
while(cRows.next())
{
MyClass myClass = new MyClass();
myClass.setPrevDate(cRows.getDate("PREV_DATE")); // In debug mode, the error was throwing when I press Resume from here.
}
}
Error:
Caused by: java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date
在数据库中,列的数据类型是DATE
仅有的。我不知道在哪里Timestamp
即将来到这里。
过时的:
Use java.util.Date
对于该领域。 java.sql.Timestamp
是它的直接子类。按原样java.sql.Date
- 去掉时间部分。为什么java数据库驱动程序将DATE作为时间戳有点奇怪。数据库供应商是什么?您指定了长度吗?确实只存储日期吗?
研究:
我调查了CachedRowSetImpl.java,Oracle 的文档和 Oracle 做的一切都很好(java.sql.Date、java.sql.Time、java.sql.Timestamp 可转换)。
CachedRowSetImpl 确实只是将 DATE 的对象(并且 getObject 可能返回高分辨率时间戳 - 带时间)转换为 java.sql.Date,这是错误的。
所以override or 代替这太阳的课。
/*
* The object coming back from the db could be
* a date, a timestamp, or a char field variety.
* If it's a date type return it, a timestamp
* we turn into a long and then into a date,
* char strings we try to parse. Yuck.
*/
switch (RowSetMD.getColumnType(columnIndex)) {
case java.sql.Types.DATE: {
long sec = ((java.sql.Date)value).getTime();
return new java.sql.Date(sec);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)