首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache元模型在尝试获取大量数字数据的总和时抛出异常

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

Stack Overflow用户
提问于 2016-07-08 21:38:38
回答 1查看 111关注 0票数 1

我是apache元模型的新手。我使用它来获取数据库表中任意数值列的总和,代码如下:

代码语言:javascript
复制
        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或numeric数据类型,则查询将返回总和,而不会给出任何错误。因此,我认为这个错误可以通过将sum()函数的结果转换为apache元模型中合适的数据类型来解决。那么谁能告诉我如何将查询结果转换为另一种数据类型,如decimal,而不是默认类型int。

EN

回答 1

Stack Overflow用户

发布于 2016-07-27 05:31:42

首先,对您的代码做一些小说明:

  • 在接受异常时要小心。你应该至少记录下发生的异常-现在你只返回0,这是处理整数,长整型等的不同方式,为什么不让你的方法返回misleading.
  • Instead呢?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38268121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档