JDBC getColumns在" IS_NULLABLE"之间的差异和"可空"

时间:2014-10-21 15:25:05

标签: java jdbc

我试图提取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这一部分的更详细信息?

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

据我所知,含义相同,但是IS_NULLABLE遵循SQL:2011 Schemata(ISO-9075-11:2011)中的information_schema.columns视图定义,尽管SQL:2011并不是#39; t指定空字符串含义(如果不可为空,则仅指定NO,对所有其他情况指定YES)。列NULLABLE使用常量columnNoNullscolumnNullablecolumnNullableUnknown的值,这些值可能用于更易读的代码,并用于switch(哪个Java 7之前的版本不支持字符串)。它也等同于ResultSetMetaData.isNullable(int)的返回值。

通常,元数据结果集的定义基于ISO-9075-11:2011(SQL:2011 Schemata)或SQL标准的其他版本中定义的information_schema表和视图。此规范可用于有关列的更多信息,但JDBC特定添加除外。除了javadoc中的内容(以及通过在apidoc和规范的其他部分中的行之间进行读取)之外,这些添加通常是显式指定的,尽管这些添加通常遵循SQL的规则和逻辑标准。