【问题标题】:JDBC Metadata Fetch Decimal PrecisionJDBC 元数据获取小数精度
【发布时间】:2017-04-27 01:16:48
【问题描述】:

我正在使用 jdbc 从 teradata 获取元数据,我想获取所有数据类型。但是对于包含 DECIMAL(10,4) 的数据库字段,我无法获得精度。我附上了我的代码 sn-p。欢迎提出建议!

 DatabaseMetaData md = con.getMetaData();

    ResultSet tbls = md.getTables(null, schema, name, null);
            if(false == tbls.next()){
                nonExistingRdbmsTables.add(name);
                LOGGER.error("Table with name {} in schema {} does not exists in source database", name, schema);
                continue;
            }

            RdbmsTableMetadata tableMD = new RdbmsTableMetadata();
            List<String> pkList = new ArrayList();
            ResultSet primaryKeys = md.getPrimaryKeys(null, schema, name);
            while(primaryKeys.next()){
                String pk = primaryKeys.getString("COLUMN_NAME");
                pkList.add(pk);
            }
            tableMD.setPkList(pkList);
            LOGGER.info("*****Primary key list for table {} is {}", name, pkList);

            tableMD.setSchema(schema);
            tableMD.setName(name);
            tableMD.setTargetName(targetName);
            tableMD.setTargetSchema(targetSchema);
            List<Column> colList = new ArrayList<>();

            ResultSet cols = md.getColumns(null, schema, name, null);
            while (cols.next()) {
                String columnName = cols.getString("COLUMN_NAME");
                String columnType = cols.getString("TYPE_NAME");
                String columnLength = cols.getString("COLUMN_SIZE");
}

有什么方法可以从 jdbc 元数据中查询精度细节吗?

【问题讨论】:

  • 您使用的是什么 DBMS?另外,cols.getInt("DECIMAL_DIGITS") 为您提供了什么?
  • COLUMN_SIZEDECIMAL_DIGITS 有什么价值?
  • DECIMAL_DIGITS 工作正常!多谢你们!这就是我不了解我的信息架构而得到的!
  • Alex 我正在使用 Teradata
  • 不客气;也总是建议查看javadoc

标签: java jdbc spring-boot


【解决方案1】:

供日后参考:-

int precision = cols.getInt("DECIMAL_DIGITS");

这很好用!感谢亚历克斯和马克。

【讨论】:

    【解决方案2】:

    ResultSetMetaData 提供getScale(int col)getPrecision(int col) 方法。如果这些不能满足您的需求,那您可能就不走运了。

    【讨论】:

    • 这需要在具有感兴趣列的表上打开ResultSet
    • 我不想打开结果集。由于其他原因,我决定使用数据库元数据。还有其他方法可以重新设计吗?
    猜你喜欢
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2015-10-02
    • 2013-01-20
    相关资源
    最近更新 更多