java - JDBC getColumns "IS_NULLABLE"和 "NULLABLE"之间的差异

标签 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

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

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

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

感谢您的帮助。

最佳答案

据我所知,含义是相同的,但是 IS_NULLABLE 遵循 SQL:2011 Schemata (ISO-9075-11: 2011),尽管 SQL:2011 没有指定空字符串的含义(它只指定 NO 如果不可为 nullable 和 YES 用于所有其他情况)。 NULLABLE 列使用常量 columnNoNullscolumnNullablecolumnNullableUnknown 的值,这些值可用于更易读的代码,并用于 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/

相关文章:

java - 应用程序未启动。找不到错误

java - JDBC:多列 IN 查询

java - 如何解决java.text.ParseException

java - Vertx自动化部署

java - 为什么 JDBC 将端口 0 视为与空(默认)端口相同?

java - 使用 Glassfish 打开与 Microsoft SQL 的连接时崩溃

java - 在 JDBC 中使用 unnest(array[someArray]) 发送三个数组时出现异常

postgresql - 臭名昭著的 java.sql.SQLException : No suitable driver found

java - CMIS session.queryObjects 不返回方面

java - URLClassLoader 无法处理 jar :file urls?