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)
虽然我得到所有其他数据,如列名,长度等绝对可以...
对于Oracle,您需要提供连接属性remarksReporting
并将其设置为true
或调用方法setRemarksReporting()
以启用它.
OracleConnection oraCon = (OracleConnection)con;
oraCon.setRemarksReporting(true);
Run Code Online (Sandbox Code Playgroud)
之后,getColumns()
将返回REMARKS
ResultSet列中的列(或表)注释.
有关更多详细信息,请参见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
用于存储注释的任何属性名称.