JDBC-ODBC问题 - 当有值时,Resultset.getString()返回null

时间:2011-02-04 19:53:52

标签: java jdbc odbc

首先,这是我在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位库之间存在问题,或者?如果您有任何帮助,我们将不胜感激。

克里斯

1 个答案:

答案 0 :(得分:2)

只需使用results.getDouble(1)