【问题标题】:How to get Column Comments in JDBC如何在 JDBC 中获取列注释
【发布时间】:2016-10-03 09:22:21
【问题描述】:

我想使用 JDBC Metadata 获取 Column cmets,但是每次它返回 null 时,我都用 Oracle 和 SqlServer 测试了它返回 Null 的两种情况。

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

虽然我得到所有其他数据,如列名、长度等,但绝对没问题...

【问题讨论】:

  • 您确定 cmets 在名为“REMARKS”的列中?
  • @Kayaman 是的 .. 因为 JavaDoc 还说元数据结果集中的 REMARKS 列可能返回 Null ,但没有说明原因 ....
  • 你必须把属性remarksReporting=true放到driverManager或者执行((OracleConnection)conn).setRemarksReporting(true)

标签: java sql-server database oracle jdbc


【解决方案1】:

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

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

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

详情请见Oracle's JDBC Reference


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

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

您在那里的唯一选择是使用 fn_listextendedproperty() 检索 cmets:

例如:

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

您需要将 MS_DESCRIPTION 替换为您用于存储 cmets 的任何属性名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多