暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

JDBC连接数据库获取表字段注释等信息

Kenny纪实号 2021-03-12
1806

最近在编写 KUTILS 的时候,需要通过JDBC
 抓取数据库的字段的数据类型、字段名称、字段注释、字段长度、字段精度等信息,这里记录下一些经常会使用到的信息。由于代码长度及表格问题文章横屏更适合阅读。

单元测试代码

 1public class TableInfoLoaderTest {
2
3  private Connection connection;
4  private Logger logger = LoggerFactory.getLogger(this.getClass());
5
6  @Before
7  public void before() {
8    DataSourceInfo dataSource = new DataSourceInfo();
9    dataSource.setDriver("com.mysql.jdbc.Driver");
10    dataSource.setUsername("root");
11    dataSource.setPassword("Ab123456");
12    dataSource.setUrl("jdbc:mysql://192.168.120.22:3306/activity?characterEncoding=UTF-8");
13    connection = ConnectionUtil.getConnection(dataSource);
14  }
15
16  @Test
17  public void testQueryDataInfo() {
18    String table = "activity_info";
19    try {
20      DatabaseMetaData metaData = connection.getMetaData();
21      ResultSet rs = metaData.getColumns(connection.getCatalog(), "%", table, "%");
22      while (rs.next()) {
23        System.out.println();
24        logger.info("列名称:\t{}", rs.getString(ResultSetColumnKeys.COLUMN_NAME.name()));
25        logger.info("java.sql.Types:\t{}", rs.getString(ResultSetColumnKeys.DATA_TYPE.name()));
26        logger.info("字段类型:\t{}", rs.getString(ResultSetColumnKeys.TYPE_NAME.name()));
27        logger.info("列的大小:\t{}", rs.getString(ResultSetColumnKeys.COLUMN_SIZE.name()));
28        logger.info("小数部分的位数:\t{}", rs.getString(ResultSetColumnKeys.DECIMAL_DIGITS.name()));
29        logger.info("基数:\t{}", rs.getString(ResultSetColumnKeys.NUM_PREC_RADIX.name()));
30        logger.info("描述列的注释:\t{}", rs.getString(ResultSetColumnKeys.REMARKS.name()));
31        logger.info("该列的默认值:\t{}", rs.getString(ResultSetColumnKeys.COLUMN_DEF.name()));
32        logger.info("列中的最大字节数:\t{}", rs.getString(ResultSetColumnKeys.CHAR_OCTET_LENGTH.name()));
33        logger.info("列的索引:\t{}", rs.getString(ResultSetColumnKeys.ORDINAL_POSITION.name()));
34        logger.info("是否允许使用 NULL:\t{}", rs.getString(ResultSetColumnKeys.IS_NULLABLE.name()));
35        logger.info("指示此列是否自动增加:\t{}", rs.getString(ResultSetColumnKeys.IS_AUTOINCREMENT.name()));
36      }
37      rs.close();
38    } catch (SQLException e) {
39      throw new RuntimeException("表信息抽取异常!", e);
40    }
41
42  }
43}

结果

 1logger.info.TableInfoLoaderTest - 列名称:    id
2logger.info.TableInfoLoaderTest - java.sql.Types:    -5
3logger.info.TableInfoLoaderTest - 字段类型:    BIGINT
4logger.info.TableInfoLoaderTest - 列的大小:    19
5logger.info.TableInfoLoaderTest - 小数部分的位数:    0
6logger.info.TableInfoLoaderTest - 基数:    10
7logger.info.TableInfoLoaderTest - 描述列的注释:    主键
8logger.info.TableInfoLoaderTest - 该列的默认值:    null
9logger.info.TableInfoLoaderTest - 列中的最大字节数:    null
10logger.info.TableInfoLoaderTest - 列的索引:    1
11logger.info.TableInfoLoaderTest - 是否允许使用 NULL:    NO
12logger.info.TableInfoLoaderTest - 指示此列是否自动增加:    NO

可选值列表

columnLabel返回类型描述
TABLE_CATString表类别(可为null)
TABLE_SCHEMString表模式(可为null)
TABLE_NAMEString表名称
COLUMN_NAMEString列名称
DATA_TYPEint来自 java.sql.Types 的 SQL 类型
TYPE_NAMEString数据源依赖的类型名称,对于 UDT,该类型名称是完全限定的
COLUMN_SIZEint列的大小。BUFFER_LENGTH 未被使用。
DECIMAL_DIGITSint小数部分的位数。对于 DECIMAL_DIGITS 不适用的数据类型,则返回 Null。
NUM_PREC_RADIXint基数(通常为 10 或 2)
NULLABLEint是否允许使用 NULL。columnNoNulls - 可能不允许使用NULL值, columnNullable - 明确允许使用NULL值, columnNullableUnknown - 不知道是否可使用 null
REMARKSString描述列的注释(可为null)
COLUMN_DEFString该列的默认值,当值在单引号内时应被解释为一个字符串(可为null)
SQL_DATA_TYPEint未使用
SQL_DATETIME_SUBint未使用
CHAR_OCTET_LENGTHint对于 char 类型,该长度是列中的最大字节数
ORDINAL_POSITIONint表中的列的索引(从 1 开始)
IS_NULLABLEStringISO 规则用于确定列是否包括 null, YES --- 如果参数可以包括 NULL, NO --- 如果参数不可以包括 NULL, 空字符串 --- 如果不知道参数是否可以包括 null
SCOPE_CATLOGString表的类别,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为null)
SCOPE_SCHEMAString表的模式,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为null)
SCOPE_TABLEString表名称,它是引用属性的作用域(如果 DATA_TYPE 不是 REF,则为null)
SOURCE_DATA_TYPEshort不同类型或用户生成 Ref 类型、来自 java.sql.Types 的 SQL 类型的源类型(如果 DATA_TYPE 不是 DISTINCT 或用户生成的 REF,则为null)
IS_AUTOINCREMENTString指示此列是否自动增加,YES --- 如果该列自动增加 , NO --- 如果该列不自动增加, 空字符串 --- 如果不能确定该列是否是自动增加参数

文章转载自Kenny纪实号,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论