Я новичок в метамодели apache. Я использую его для получения суммы любого числового столбца в таблице базы данных, используя следующий код:Метамодель Apache бросает исключение, пытаясь получить сумму очень большого числа числовых данных
Object object = null;
long sum = 0;
String columnName = table.getColumn(iColumnNumber).getName();
Query query = dataContext.query().from(table).select(FunctionType.SUM, table.getColumnByName(sColumnName)).toQuery();
org.eobjects.metamodel.data.DataSet ds = dataContext.executeQuery(query);
try {
ds.next();
org.eobjects.metamodel.data.Row row = ds.getRow();
try {
object = row.getValue(0);
} catch (Exception ex) {
return 0;
}
if (object instanceof java.lang.Long) {
sum = (long) object;
} else if (object instanceof BigDecimal) {
sum = ((BigDecimal) object).longValue();
} else if (object instanceof java.lang.Integer) {
sum = ((java.lang.Integer) object).longValue();
}
} catch (Exception ex) {
return 0;
} finally {
if (ds != null) {
ds.close();
}
}
код отлично работает для небольших данных, но когда я пытаюсь тот же код для очень больших данных, содержащих сотни тысяч строк , Код генерирует исключение: Не удалось получить следующую запись в наборе результатов: Ошибка арифметического переполнения, преобразующая выражение в тип данных int.
Когда я запускаю тот же запрос, используя функцию sum в таблице базы данных непосредственно в окне сценария dbms, я получаю такую же ошибку. Если я передам результат функции sum() в bigint или числовой тип данных, запрос возвращает сумму без каких-либо ошибок. Поэтому я думаю, что эту ошибку можно решить, добавив результат функции sum() в подходящий тип данных в метамодели apache. Так может ли кто-нибудь дать мне знать, как я могу передать результат запроса в другой тип данных, например десятичный, а не по умолчанию тип int.