如何在JDBC中获取列注释

时间:2016-06-03 10:39:22

标签: java sql-server database oracle jdbc

我想使用JDBC元数据获取列注释,但每次返回null时,我都会使用Oracle和SqlServer测试它返回Null的情况。

DatabaseMetaData dmt = con.getMetaData();    
colRs = dmt.getColumns(null, "dbo", 'Student', null);
while (colRs.next()) {
System.out.println(colRs.getString("REMARKS");
   }

虽然我得到的所有其他数据,如列名,长度等,绝对可以......

1 个答案:

答案 0 :(得分:5)

对于Oracle,您需要提供连接属性remarksReporting并将其设置为true或调用方法setRemarksReporting()以启用它。

OracleConnection oraCon = (OracleConnection)con;
oraCon.setRemarksReporting(true);

之后,getColumns()将返回ResultSet的REMARKS列中的列(或表)注释。

有关详细信息,请参阅Oracle's JDBC Reference

对于SQL Server,这根本不可能。

Microsoft和jTDS驱动程序都不会公开表或列注释。可能是因为SQL Server中没有SQL支持。使用“扩展属性”和属性名称MS_DESCRIPTION的通常方法不可靠。主要是因为没有要求我们MS_DESCRIPTION作为属性名称。甚至sp_help都不会返回这些评论。至少jTDS驱动程序只需调用sp_help去表列。我不知道微软的驱动程序是做什么的。

您拥有的唯一选择是使用fn_listextendedproperty()来检索评论:

e.g:

SELECT objname, cast(value as varchar(8000)) as value 
FROM fn_listextendedproperty ('MS_DESCRIPTION','schema', 'dbo', 'table', 'Student', 'column', null) 

您需要将MS_DESCRIPTION替换为用于存储评论的属性名称。