当前位置: 首页 > 知识库问答 >
问题:

select语句中的JDBC数值溢出

施俊哲
2023-03-14

我有一个java应用程序,它执行用户在UI上输入的SQL select语句。应用程序获取元数据以了解列类型:

ResultSetMetaData metadata = rs.getMetaData();
int numColumns = metadata.getColumnCount();
for (int i=1;i<=numColumns;i++){
    column[i] = metadata.getColumnType(i);  
}

一旦我得到结果集,对于每一行,我循环遍历列以了解类型。根据类型,我使用getInt()、getDate()或getString()获得值。

问题是,在某些情况下,select有一个很大的SUM(),当我执行getInt()时会出现一个数字溢出(我从JDBC驱动程序得到一个错误,在我的例子中是Sybase)。问题是getInt()中要获得的数字大于int的容量。

一种解决方案是使用getLong()而不是getInt(),但是,由于在用户输入select列时,我事先不知道它们,所以我可能会使用getLong()处理非常小的数值,而处理大量的数值,这将完全浪费64位字段。

有什么办法解决这个问题吗?

共有1个答案

燕正德
2023-03-14

在64位CPU的时代,也许getLong()毕竟不会是一种浪费。但即使getLong()也可能溢出,因此您更安全,但并不完全安全。BigDecimal使您处于安全的状态。由于您将应用程序描述为用户在其中输入语句的UI,因此瓶颈很可能是用户本身或JDBC,而不是Java。

您可以使用ResultSetMetadata.getColumnType(int column)确定列的类型,并根据该类型选择Java类型。您可以使用ResultSetMetadata.getColumnClassName(int column)查找驱动程序建议的Java类,并使用ResultSet.getObject(int column)检索数据。这是否真的方便也可能取决于司机的素质。

 类似资料:
  • 问题内容: 我需要的是,如果和如果。如何将此添加到上面的查询中? 问题答案: 参见http://dev.mysql.com/doc/refman/5.0/en/control-flow- functions.html 。 此外,您可以处理条件为null的情况。如果为零: 该部分表示 当金额不为null时返回金额,否则返回0 。

  • 问题内容: 何去做?可以使用 select 语句(其中所有空值都应替换为123)编写什么查询? 我知道我们可以做到这一点,使用update tablename set fieldname =“ 123”,其中fieldname为null; 但不能使用 select 语句来做到这一点。 问题答案: 在MySQL中,有很多选项可以代替NULL值:

  • 在SQL中,语句用于从数据库中的表中查询或检索数据。 返回存储在表中的数据,返回的结果称为结果集。 语法 这里,表达式是要从中选择数据的表的字段名称。使用以下语法选择表中可用的所有字段: 假设表有以下行记录 - EMP_ID EMP_NAME CITY PHONE_NO SALARY 1 Kristen Chicago 9737287378 150000 2 Russell Austin 9262

  • 主要内容:语法,实例,设置输出列的宽度,Schema 信息SQLite 的 SELECT 语句用于从 SQLite 数据库表中获取数据,以结果表的形式返回数据。这些结果表也被称为结果集。 语法 SQLite 的 SELECT 语句的基本语法如下: 在这里,column1, column2...是表的字段,他们的值即是您要获取的。如果您想获取所有可用的字段,那么可以使用下面的语法: 实例 假设 COMPANY 表有以下记录: 下面是一个实例,使用 SELE

  • 主要内容:Oracle SELECT示例在本教程中,将学习如何使用Oracle SELECT语句从单个表中查询数据。 在Oracle中,表是由列和行组成。 例如,示例数据库中的表具有以下列:,,,和。表中这些列中也有对应的数据。 要从表的一个或多个列(,,,)中检索数据,请使用以下语法的语句: 在这个语句中: 首先,需要指定要查询数据的表名。 其次,指定想要返回数据的列。 如果需要返回多个列,则需要用逗号()将这些列分隔。 请注意,SE

  • SELECT 语句用于从数据库中选取数据。 SQL SELECT 语句 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中,称为结果集。 SQL SELECT 语法SELECT column_name,column_name FROM table_name; 与SELECT * FROM table_name; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面