首先,这是我在Windows Vista,Windows 7和Windows Server 2008上遇到的问题,但在XP和Server 2003上却没有。
我知道在Windows Server 2003和Windows Vista之间,Microsoft将MDAC(我们发布的2.8版本)更改为WDAC 6.0,我假设我的问题出现在那些热闹的库中。
我有一条SQL语句:“SELECT TermStates.ActualCoeff FROM TermStates WHERE TermStates.AnalID ='000X'ORDER BY TermStates.indx ASC”返回单列数据,假设没有值可以为Null。这些值是高精度的,并且大多数都非常小(即接近零)并且也可能是负的。
第一组数据值如下所示:
-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-ODBC桥这样的行为?我已经在这个环境中工作了很多年没有任何问题,但是这个让我很难过。是否有任何关于“-0.0X”的位对齐可能表明64位和32位库之间存在问题,或者?如果您有任何帮助,我们将不胜感激。
克里斯
答案 0 :(得分:2)
只需使用results.getDouble(1)
!