java.sql.SQLException:数值溢出
我正在使用JSF在同一页面上构建饼图和条形图,这两个组件都从这个查询中获取信息:java.sql.SQLException:数值溢出,java,jsf-2,oracle11g,Java,Jsf 2,Oracle11g,我正在使用JSF在同一页面上构建饼图和条形图,这两个组件都从这个查询中获取信息: select 'ACCOUNTS'PRODUCT,sum(ACCT_BAL_LCY) AMOUNT from account_master where schm_type in(?, ?, ?,?) and ACCT_BAL_LCY >0 union select 'BILLS'PRODUCT, sum(LIAB_AMT_LCY)AMOUNT from bills_details union select
select 'ACCOUNTS'PRODUCT,sum(ACCT_BAL_LCY) AMOUNT from account_master where schm_type in(?, ?, ?,?) and ACCT_BAL_LCY >0
union select 'BILLS'PRODUCT, sum(LIAB_AMT_LCY)AMOUNT from bills_details union select 'DOCUMENTARY CREDITS'PRODUCT,sum(LIAB_AMOUNT)AMOUNT
from DC_DETAILS union select 'GUARANTEES'PRODUCT, sum(LIAB_AMT_LCY)AMOUNT from BG_DETAILS;
执行它的方法是:
private void createPieModel() {
pieModel = new PieChartModel();
categoryModel = new CartesianChartModel();
ChartSeries act = new ChartSeries();
act.setLabel("Product Types");
Connection conn;
db = new DBConnection();
conn = db.getDbConnection();
pr = new BiProperties();
try {
String sql = pr.getDBProperty().getProperty("liability.bank");
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "SBA");
ps.setString(2, "CAA");
ps.setString(3, "TDA");
ps.setString(4, "CCA");
ResultSet rs = ps.executeQuery();
int i = 0;
while (rs.next()) {
pieModel.set(rs.getString(1), rs.getInt(2));
act.set(rs.getString(1), rs.getInt(2));//Error on this Line
cities.put(i, rs.getString(1));
i++;
}
categoryModel.addSeries(act);
} catch (SQLException asd) {
log.debug(Level.FATAL, asd);
}
}
有时两个图都显示,有时没有一个图显示,而在其他时间,只有饼图显示。在检查后端时,我发现以下错误:
java.sql.SQLException: Numeric Overflow
如何避免这种情况,因为它是随机发生的???我怀疑它是由SQL中的聚合函数引发的。
默认情况下,AFAIR SQL将定义一个变量来保存聚合函数结果,使其与此函数的参数类型相同。您可能希望在SQL中将其重新定义为更高的精度/大小变量 这可能会有帮助:[[1]:在这条sql中,除了sum()之外,我没有任何函数。这是一条来自相关表的普通select语句。如果您的列被定义为太小而无法容纳聚合值,则它适用于任何聚合函数。