我试图提取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
我能想到的两个不同专栏的唯一想法是:
那个定义表列在读取时可以为null,而另一个表示在此表列中可以为null。但我无法确定这个想法的正确性。
有谁知道这两列之间有什么区别? 有没有关于JDBC API这一部分的更详细信息?
感谢您的帮助。
答案 0 :(得分:3)
据我所知,含义相同,但是IS_NULLABLE
遵循SQL:2011 Schemata(ISO-9075-11:2011)中的information_schema.columns
视图定义,尽管SQL:2011并不是#39; t指定空字符串含义(如果不可为空,则仅指定NO
,对所有其他情况指定YES
)。列NULLABLE
使用常量columnNoNulls
,columnNullable
和columnNullableUnknown
的值,这些值可能用于更易读的代码,并用于switch
(哪个Java 7之前的版本不支持字符串)。它也等同于ResultSetMetaData.isNullable(int)
的返回值。
通常,元数据结果集的定义基于ISO-9075-11:2011(SQL:2011 Schemata)或SQL标准的其他版本中定义的information_schema
表和视图。此规范可用于有关列的更多信息,但JDBC特定添加除外。除了javadoc中的内容(以及通过在apidoc和规范的其他部分中的行之间进行读取)之外,这些添加通常是不显式指定的,尽管这些添加通常遵循SQL的规则和逻辑标准。