DatabaseMetaData 获取数据表字段注释内容

本文介绍了如何使用Java的DatabaseMetaData接口获取MySQL和Oracle数据库中表字段的注释。对于MySQL,直接调用getColumns方法即可;而对于Oracle,需要在建立连接时设置remarksReporting属性为true,以确保能获取到注释信息。此外,当使用连接池时,可能需要将连接转换为OracleConnection来设置这个属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用DataBaseMetaData获取mysql表字段注释

 

  1. DatabaseMetaData metaData = connection.getMetaData(); 
  2. ResultSet rs = null; 
  3.  rs = metaData.getColumns(dbName, null, tableName, "%");
  4. while (rs.next()) {
  5.              QueryColumn column=new QueryColumn(rs.getString("COLUMN_NAME"), rs.getString("TYPE_NAME"));
  6.              column.setComment(rs.getString("REMARKS"));
  7.                 columnList.add(column);
  8.             }

metaData.getColumns mysql实现接口

DatabaseMetaDataUsingInfoSchema#getColumns
  1.  sqlBuf.append("CASE WHEN LCASE(DATA_TYPE)='date' THEN 10 WHEN LCASE(DATA_TYPE)='time' THEN 8 WHEN LCASE(DATA_TYPE)='datetime' THEN 19 WHEN LCASE(DATA_TYPE)='timestamp' THEN 19 WHEN CHARACTER_MAXIMUM_LENGTH IS NULL THEN NUMERIC_PRECISION WHEN CHARACTER_MAXIMUM_LENGTH > 2147483647 THEN 2147483647 ELSE CHARACTER_MAXIMUM_LENGTH END AS COLUMN_SIZE, " + MysqlIO.getMaxBuf() + " AS BUFFER_LENGTH," + "NUMERIC_SCALE AS DECIMAL_DIGITS," + "10 AS NUM_PREC_RADIX," + "CASE WHEN IS_NULLABLE='NO' THEN " + 0 + " ELSE CASE WHEN IS_NULLABLE='YES' THEN " + 1 + " ELSE " + 2 + " END END AS NULLABLE," + "COLUMN_COMMENT AS REMARKS," + "COLUMN_DEFAULT AS COLUMN_DEF," + "0 AS SQL_DATA_TYPE," + "0 AS SQL_DATETIME_SUB," + "CASE WHEN CHARACTER_OCTET_LENGTH > " + 2147483647 + " THEN " + 2147483647 + " ELSE CHARACTER_OCTET_LENGTH END AS CHAR_OCTET_LENGTH," + "ORDINAL_POSITION," + "IS_NULLABLE," + "NULL AS SCOPE_CATALOG," + "NULL AS SCOPE_SCHEMA," + "NULL AS SCOPE_TABLE," + "NULL AS SOURCE_DATA_TYPE," + "IF (EXTRA LIKE '%auto_increment%','YES','NO') AS IS_AUTOINCREMENT, " + "IF (EXTRA LIKE '%GENERATED%','YES','NO') AS IS_GENERATEDCOLUMN FROM INFORMATION_SCHEMA.COLUMNS WHERE ");

使用DataBaseMetaData获取oracle表字段注释

oracle是需要在连接JDBC获取connection时通过RemarksReporting来设置是否能获取comments.

而RemarksReporting默认为false.在获取oracle的表字段信息时需要设置为True.

 
  1. Properties props =newProperties();
  2. props.put("remarksReporting","true");
  3. Class.forName("oracle.jdbc.driver.OracleDriver");
  4. dbConn = DriverManager.getConnection(url, props);
  5. DatabaseMetaData dbmd = dbConn.getMetaData();

对于使用使用连接池时,可先判断连接数据库类型,将connection转换为OracleConnection,因为setRemarking在OracleConnection实现了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值