【问题标题】:JDBC getColumns differences between "IS_NULLABLE" and "NULLABLE"“IS_NULLABLE”和“NULLABLE”之间的 JDBC getColumns 差异
【发布时间】:2014-10-21 15:25:04
【问题描述】:

我正在尝试提取 JDBC 数据库驱动程序的数据库元数据。

现在我面临着我无法向自己解释的部分文档:

方法DatabaseMetaData.getColumns(...); (JavaDoc) 声明了两个不同的“可空性”列:

NULLABLE int => 允许为 NULL。
    columnNoNulls - 可能不允许 NULL 值
    columnNullable - 绝对允许 NULL 值
    columnNullableUnknown - 可空性未知 

 IS_NULLABLE String => ISO 规则用于确定列的可空性。
    YES --- 如果列可以包含 NULL
    NO --- 如果列不能包含 NULL
    空字符串 --- 如果列的可空性未知

对于这两个不同的列,我能想到的唯一想法是:

一个定义表列在读取时可以为空,而另一个声明到该表列可以插入空。但是我无法确定这个想法的正确性。

有谁知道这两列有什么区别? 是否有关于这部分 JDBC API 的更详细信息?

感谢您的帮助。

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-13
      • 2010-10-19
      • 2020-09-15
      • 2014-06-30
      • 2011-11-16
      • 2011-05-08
      相关资源
      最近更新 更多