如何在 JDBC 中获取列注释

问题描述 投票:0回答:2

我想使用 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");
   }

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

java sql-server database oracle jdbc
2个回答
8
投票

对于 Oracle,您需要提供连接属性

remarksReporting
并将其设置为
true
或调用方法
setRemarksReporting()
来启用它。

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

之后,

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

请参阅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) 

您需要将

MS_DESCRIPTION
替换为您用来存储评论的任何属性名称。


0
投票

问题是 DatabaseMetaData 中的 getColumns() 方法默认情况下不会检索 Oracle 数据库的列注释/备注。要在 Oracle 中获取列注释,您需要查询 ALL_COL_COMMENTS 视图:

  // Query comments 
  String sql = "SELECT column_name, comments FROM all_col_comments WHERE table_name = ?";
  PreparedStatement ps = connection.prepareStatement(sql);
  ps.setString(1, tableName);

  ResultSet rs2 = ps.executeQuery();
  while (rs2.next()) {
    String name = rs2.getString("column_name");
    String comment = rs2.getString("comments");
  }
© www.soinside.com 2019 - 2024. All rights reserved.