gpt4 book ai didi

java - Apache 元模型在尝试获取大量数值数据的总和时抛出异常

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:01 25 4
gpt4 key购买 nike

我是 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 时出现算术溢出错误。

当我直接在 dbms 脚本窗口中对数据库表使用 sum 函数运行相同的查询时,出现相同的错误。如果我将 sum() 函数的结果转换为 bigint 或数字数据类型,查询将返回总和,而不会给出任何错误。因此,我认为可以通过将 sum() 函数的结果转换为 apache 元模型中合适的数据类型来解决此错误。那么谁能告诉我如何将查询结果转换为另一种数据类型,例如十进制而不是默认类型 int。

最佳答案

首先对您的代码进行一些小评论:

  • 小心吞咽异常。您至少应该记录发生的异常 - 现在您只返回 0,这是误导性的。
  • 为什么不让您的方法返回 Number,而不是以不同的方式处理整数、长整型等?

关于算术溢出问题,如果您的数据库确实返回 BigDecimal(非常不寻常,但数据库有时就是这样),那么您可能应该查看诸如 Converting BigDecimal to Integer 之类的问题/答案。

关于java - Apache 元模型在尝试获取大量数值数据的总和时抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com