【问题标题】:result set metadata giving me the same column type for both NUMBER and NUMBER(Precision,Scale)结果集元数据为我提供了 NUMBER 和 NUMBER(Precision,Scale) 的相同列类型
【发布时间】:2020-03-29 02:41:57
【问题描述】:

我尝试使用元数据获取列类型。 我有 VARCHAR2、NUMBER 和 NUMBER(Precision,Scale) 类型的列,它们分别存储文本、整数和浮点值。 当我使用下面的代码时,我将列类型作为 NUMBER 用于 NUMBER 和 NUMBER(Precision,Scale)。

Statement stmt = dbCon.createStatement();
ResultSet resultSet = stmt.executeQuery("select * from TBL_DATA_INFO where 1 = 2");
        ResultSetMetaData rsmd = resultSet.getMetaData();
        int noOfcols = rsmd.getColumnCount();
        for(int i=1;i<=noOfcols;i++) {              
            String colName = rsmd.getColumnName(i); 
            String colType = rsmd.getColumnTypeName(i);
            int size = rsmd.getColumnDisplaySize(i);
            System.out.println("##Column name: [" + name + "]; type: [" + type + "]; size: [" + size + "]");
        }

如何判断列是 NUMBER 还是 NUMBER(Precision,Scale) 类型。

【问题讨论】:

  • getColumnDisplaySize() 顾名思义:它返回该列的 display 大小。它既不是精度也不是规模。如果你想要这些,请使用 getScale()getPrecision()
  • @a_horse_with_no_name 我敢打赌这个问题的大多数读者不会知道这一点。您应该回答或标记重复(假设您可以找到合适的)。

标签: java sql oracle metadata


【解决方案1】:

我有 VARCHAR2、NUMBER 和 NUMBER(Precision,Scale) 类型的列,它们分别存储文本、整数和浮点值。我将 NUMBER 和 NUMBER(Precision,Scale) 的列类型都设为 NUMBER。

无论声明如何,Oracle NUMBER 都不是浮点数:它是完全固定的。 Oracle 确实提供了 BINARY_FLOAT 和 BINARY_DOUBLE 来存储比 NUMBER 支持的更大的值。 Find out more

NUMBER 和 NUMBER(Precision,Scale) 之间的区别在于,前者允许 任何数值 可以适合数据类型,但后者强制执行特定格式。实际上,要强制执行值必须是整数的规则,我们需要定义一个比例,即 NUMBER(*,0) 表示任意长度的整数或 NUMBER(4,0) 表示四位整数。

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2023-03-19
    • 2015-03-28
    • 2010-10-02
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多