Для начала, это проблема, с которой я сталкиваюсь в 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 ОТ TermStates ГДЕ TermStates.AnalID = '000X' ORDER BY TermStates.indx ASC», который возвращает один столбец данных, где предполагается, что никакие значения не могут быть нулевыми. Эти значения имеют высокую точность, и большинство из них довольно малы (т. Е. Близки к нулю) и также могут быть отрицательными.
Первый набор значений данных выглядит следующим образом:
-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 () вернет ноль.
Основной код выглядит так:
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-битными библиотеками, или? Буду признателен за любую помощь вам.
Chris