如何在JDBC中获取列注释

Cha*_*nky 1 java database sql-server 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");
   }
Run Code Online (Sandbox Code Playgroud)

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

a_h*_*ame 5

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

OracleConnection oraCon = (OracleConnection)con;
oraCon.setRemarksReporting(true);
Run Code Online (Sandbox Code Playgroud)

之后,getColumns()将返回REMARKSResultSet列中的列(或表)注释.

有关更多详细信息,请参见Oracle的JDBC参考


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

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

你在那里唯一的选择是fn_listextendedproperty()用来检索评论:

例如:

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

您需要替换MS_DESCRIPTION用于存储注释的任何属性名称.