Java DatabaseMetaData.getTables()返回多少列?

Java DatabaseMetaData.getTables()返回多少列?,java,database,oracle,jdbc,Java,Database,Oracle,Jdbc,我在玩DatabaseMetaData类,看看它是如何工作的。javadoc注释似乎说明了一个问题,而代码则说明了另一个问题。我知道这是一个接口,所以要正确实现这一点,真正取决于提供JDBC驱动程序的供应商。但我想知道我是否遗漏了什么 我正在使用Oracle 10g的一个版本。注释基本上意味着它将在结果集中返回以下10列: 餐桌猫 表2.1.1-1 表名称 表格类型 评论 猫 类型模式 键入您的姓名 自我参照 参考生成 实际上,我在结果集中只得到5列: 餐桌猫 表2.1.1-1 表名称 表

我在玩DatabaseMetaData类,看看它是如何工作的。javadoc注释似乎说明了一个问题,而代码则说明了另一个问题。我知道这是一个接口,所以要正确实现这一点,真正取决于提供JDBC驱动程序的供应商。但我想知道我是否遗漏了什么

我正在使用Oracle 10g的一个版本。注释基本上意味着它将在结果集中返回以下10列:

  • 餐桌猫

  • 表2.1.1-1

  • 表名称

  • 表格类型

  • 评论

  • 类型模式

  • 键入您的姓名

  • 自我参照

  • 参考生成

实际上,我在结果集中只得到5列:

  • 餐桌猫

  • 表2.1.1-1

  • 表名称

  • 表格类型

  • 评论


那么是什么原因呢?我是否误读JavaDoc,或者这与JDBC驱动程序相当。例如,如果我将oracle换成MySQL(当然,我会得到适当的驱动程序),我可能会得到许多列吗?

JDBC是一个规范。一些特性需要符合规范;其他是可选的

我不知道完整的规范,但这一定是Oracle选择不返回接口中表示的所有值的功能之一。其他供应商如MySQL可能会选择这样做

你得试试看


缺少的列对应用程序的运行至关重要吗?切换数据库供应商似乎是一个微不足道的理由。

您正在使用的Oracle 10g JDBC驱动程序只是满足了一个较旧的规范。下面是它所遵循的一个标准。您必须了解JDBC驱动程序的JDBC版本,以便在您做的不仅仅是绝对的基础工作时有效地使用它们。

不,我一点也没有遗漏任何重要的内容,并且返回的列对于我要完成的工作来说绝对足够了。更重要的是,我试图编写这组特定的代码,使其与数据库无关。您提到了一个规范,在哪里可以找到它,这样您就可以知道什么是可选的了?而且,这实际上是为了学习,而不是任何关键的东西。纯粹好奇。你可以在谷歌上搜索规范,但它是用那些java.sql接口表达的。