简体   繁体   English

ResultSetMetaData 获取列的默认值

[英]ResultSetMetaData getting default value of column

I am Using Oracle database.我正在使用 Oracle 数据库。

I want to get default value assign to column using Java JDBC.我想使用 Java JDBC 将默认值分配给列。

But using ResultSetMetaData does not provide any method to get default value of column.但是使用ResultSetMetaData不提供任何方法来获取列的默认值。

So please tell me any idea.所以请告诉我任何想法。 Thanks in advance.提前致谢。

您可以运行此查询

Select DATA_DEFAULT from USER_TAB_COLUMNS where TABLE_NAME ='MyTable' and COLUMN_NAME = 'MyColumn'

below function Returns the default value of a column.下面的函数返回列的默认值。 call it on your ResultSetMetaData在您的ResultSetMetaData上调用它

public java.lang.String getDefaultValue(int columnIndex) // or columnName
                                 throws DriverException

like ResultSetMetaData.getDefaultValue(columnNameOrcolumnIndex)ResultSetMetaData.getDefaultValue(columnNameOrcolumnIndex)

There is no 'getDefaultValue' method on ResultSetMetaData in Java JDBC that I can find.我能找到的 Java JDBC 中的 ResultSetMetaData 上没有“getDefaultValue”方法。
However the following query works:但是,以下查询有效:

SELECT COLUMN_NAME, COLUMN_DEFAULT FROM INFORMATION_SCHEMA.COLUMNS
where table_name='<tablename>' and COLUMN_DEFAULT is not null

Connect to the db in question, or similarly with the db name querying master.连接到有问题的数据库,或者类似地使用查询 master 的数据库名称。

This answer uses DatabaseMetadata rather than ResultSetMetadata , so technically it does not answer the question posed.这个答案使用DatabaseMetadata而不是ResultSetMetadata ,所以从技术上讲它不回答提出的问题。 However, it appears more reliable than a query and still has long-term value for the community at large:然而,它似乎比查询更可靠,并且对整个社区仍然具有长期价值:

JDBC is there a way to detect if a column has a default? JDBC 有没有办法检测列是否有默认值?

Example:例子:

Connection connection = ...;

DatabaseMetaData databaseMetaData = connection.getMetaData();
try (ResultSet resultSet = databaseMetaData.getColumns(null, null, "MyTable", "MyColumn")) {
    while (resultSet.next()) {
        String defaultValue = resultSet.getString("COLUMN_DEF");
        // Do something...
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM