我想使用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");
}
虽然我得到的所有其他数据,如列名,长度等,绝对可以......
答案 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
替换为用于存储评论的属性名称。