首先,这是我在Windows、Windows 7和Windows 2008上遇到的问题,而不是XP和Server 2003上的问题。
我知道,在Windows 2003和Windows之间,微软将MDAC (我们的版本为2.8)更改为WDAC 6.0,而且我认为,我的问题就在那堆热气腾腾的库中。
我有一条SQL语句:“从TermStates.ActualCoeff TermStates选择TermStates.AnalID = '000X‘ORDER BY TermStates.indx ASC”,它返回一列数据,假定没有值可以是TermStates.indx。这些数值精度很高,而且大多数都很小。接近于零),也可以是负的。
第一组数据值如下所示:
-1.31182339008657
4.53959374804032
8.9828426279767
-0.07429423578308
1.90497874662919
-0.966443915857118
0.169642057606282
-0.825467091179711
-0.206287563886913
-1.00269723837058
-1.30688278976707
0.236262277634983
0
0
0
0.108773852550276
0
0
0 -0.0922931225677525
0
0.217813798294512
第二组是这样的:
-1.63590653334839
-0.959565335083171
9.91635261365054
-0.135820145149139
-3.2385711942924
-1.1562654250619
0.174470946581009
0
0
-1.13424407912293
0
1.0795237314308
0
0
0
0.132662710394659
0
0
0
-0.0899603109525667
0
0
还有更多的数据列,它们都显示出相同的问题。如果返回的数字以"-0.0X“开头,则results.getString()函数将返回null。
基本代码如下所示:
results = statement.executeQuery(sql);
if(results != null)
{
ResultSetMetaData metaData = results.getMetaData();
ArrayList rowList = new ArrayList();
String colType = metaData.getColumnTypeName(1);
Object obj = null;
if(colType.equals("DOUBLE"))
{
obj = null;
String fValue = results.getString(1);
if(fValue != null && fValue.length() > 0)
{
obj = new Double(fValue);
}
else
{
obj = new Double(0.0);
}
}
else
{
obj = results.getString(1);
}
rowList.add(obj);
}有人见过JDBC桥的这种行为吗?多年来,我一直在这个环境中工作,没有任何问题,但这件事让我很困惑。是否有任何关于"-0.0X“的位对齐方式可能表示64位和32位库之间的问题,或者?如果你们能提供任何帮助,我们将不胜感激。
克里斯
发布于 2011-02-04 20:12:21
就用results.getDouble(1)吧!
https://stackoverflow.com/questions/4902307
复制相似问题