我正在尝试提取 JDBC 数据库驱动程序的数据库元数据。
现在我面临着文档的一部分,我无法向自己解释:
方法 DatabaseMetaData.getColumns(...);
( JavaDoc ) 声明了两个不同的“可空性”列:
NULLABLE int => is NULL allowed. columnNoNulls - might not allow NULL values columnNullable - definitely allows NULL values columnNullableUnknown - nullability unknown
和
IS_NULLABLE String => ISO rules are used to determine the nullability for a column. YES --- if the column can include NULLs NO --- if the column cannot include NULLs empty string --- if the nullability for the column is unknown
对于这两个不同的列,我能想到的唯一想法是:
一个定义表列在读取时可以为空,另一个声明可以将空列插入到该表中。但我无法确定这个想法的正确性。
有谁确切知道这两列之间的区别是什么? 有没有关于这部分 JDBC API 的更详细的信息?
感谢您的帮助。
最佳答案
据我所知,含义是相同的,但是 IS_NULLABLE
遵循 SQL:2011 Schemata (ISO-9075-11: 2011),尽管 SQL:2011 没有指定空字符串的含义(它只指定 NO
如果不可为 nullable 和 YES
用于所有其他情况)。 NULLABLE
列使用常量 columnNoNulls
、columnNullable
和 columnNullableUnknown
的值,这些值可用于更易读的代码,并用于 switch
(Java 7 之前的版本不支持字符串)。也相当于ResultSetMetaData.isNullable(int)
的返回值.
一般来说,元数据结果集的定义基于 ISO-9075-11:2011 (SQL:2011 Schemata) 或其他版本的 SQL 标准中定义的 information_schema
表和 View 。此规范可用于提供有关列的更多信息,但 JDBC 特定添加除外。这些添加通常未明确指定,除了 javadoc 中的内容(以及通过阅读 apidoc 和规范的其他部分中的行之间),尽管这些添加通常遵循 SQL 的规则和逻辑标准。
关于java - JDBC getColumns "IS_NULLABLE"和 "NULLABLE"之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490427/