Java 使用聚合函数(如min或max)时,resultsetmetadata.getScale()返回0

Java 使用聚合函数(如min或max)时,resultsetmetadata.getScale()返回0,java,oracle,jdbc,metadata,Java,Oracle,Jdbc,Metadata,在java应用程序中,我从oracle数据库中选择数值。我需要知道所选值逗号前的位数,因此我使用了ResultSetMetaData类的getScale()方法。只要我不使用诸如min、max等聚合函数,这种方法就可以很好地工作。。。在我的中选择语句。使用最小值或最大值时getScale()返回0ColumnType仍然是与列值相同的(数字) 你知道原因是什么吗?另外,我还在寻找一个不太尴尬的解决办法 我们使用:oci驱动程序、Java 6、Oracle 10g通常,任何表达式的规模都是未知的。

在java应用程序中,我从oracle数据库中选择数值。我需要知道所选值逗号前的位数,因此我使用了
ResultSetMetaData
类的
getScale()
方法。只要我不使用诸如min、max等聚合函数,这种方法就可以很好地工作。。。在我的
中选择
语句。使用最小值或最大值时
getScale()
返回0
ColumnType
仍然是与列值相同的
(数字)

你知道原因是什么吗?另外,我还在寻找一个不太尴尬的解决办法


我们使用:
oci驱动程序、Java 6、Oracle 10g

通常,任何表达式的规模都是未知的。例如,数值列的
AVG
不能依赖于列的原始刻度。这要由客户来处理。除非你有实际值,否则你怎么知道总和的精度呢?类似地,通过
RTRIM
REPLACE
函数返回的字符串长度是多少?在查看整个结果集的实际值之前,您没有办法知道

也许在SQL本身中,您可以知道适当的比例是多少。此问题建议使用
cast
转换为适当的类型


在您的情况下,您询问的是
min
max
。它们的特殊之处在于它们保持了柱的比例和精度。也许不是司机,但从逻辑上讲,他们是这样的。如果您必须知道比例,可以使用
java.sql.DatabaseMetadata
方法查看列本身的元数据,而不是结果集的元数据。

非常感谢您的全面回答。我对sql语句没有太大的影响,所以casting和databasemetadata对我来说是不可用的选项。您知道如何从java中获取所使用的逗号字符,以便我可以像您所说的那样查看值吗?虽然这并不能解决我的问题,但我将你的帖子标记为解决方案,因为它是我问题的完美答案。感谢数字列,一个选项是始终使用
getBigDecimal()
进行检索,并从中计算出比例。