【问题标题】:Get scale and precision of a NUMBER column through Java API?通过 Java API 获取 NUMBER 列的比例和精度?
【发布时间】:2018-01-11 06:46:58
【问题描述】:

我有一个关于 Oracle DB 的问题。假设我有一列 NUMBER 类型。如何通过 Java API 获取此列的精度和规模?

非常感谢。

【问题讨论】:

标签: java jdbc oracle11g ojdbc


【解决方案1】:

假设您已经有一个ResultSet,您可以获得它的元数据,该元数据应该提供所需的数据:

int column = ...  // first column is 1 !!
ResultSet rset = ...

ResultSetMetaData metadata = rset.getMetaData();
int precision = metadata.getPrecision(column);
int scale = metadata.getScale(column);

如果您没有ResultSet,只需执行一条不返回任何行的 SQL 语句:

Connection conn = DriverManager.getConnection(...);
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("SELECT TheColumn FROM TheTable WHERE 1 = 0");
                             // or "SELECT * FROM TheTable WHERE 1 = 0");

元数据提供的更多细节:ResultSetMetaData

【讨论】:

  • 谢谢。所以这意味着如果它所属的表为空,我无法获得该列的精度或比例?
  • 确定你可以 - “执行返回 no rows 的 SQL 语句”,尽管你 can 也执行返回部分或所有行的语句 [: -)。
【解决方案2】:

您甚至不需要创建查询。您可以使用数据库元数据。然后找出所有关于您的数据库的信息。 (见http://docs.oracle.com/javase/8/docs/api/java/sql/DatabaseMetaData.html

DataBaseMetaData dmd = connection.getMetaData();
ResultSet rs = dmd.getColumns("DB-Name", "Schema-Name","TableName","ColumnName");
System.out.println("Type Name: " + rs.getString(6) + "\n" +
"Column Size: " + rs.getInt(7) + "\n" +
"Decimal Digits: " + rs.getInt(9) + "\n" +
"Radix: " +  rs.getInt(10) + "\n" );

DataBaseMeta 可以收集很多信息。它在 Java-API-Docs 上有很好的记录。 请注意,当您扫描大型数据库时,它可能会消耗大量资源。

【讨论】:

    猜你喜欢
    • 2017-02-16
    • 2010-12-07
    • 2016-04-09
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多