问题描述

今天在读取表的注释信息(COMMENT)时,发现返回的REMARKS字段返回居然是null.
以下是代码示例:

DatabaseMetaData meta = this.pConnection.getMetaData();
// 获取所有表信息
ResultSet resultSet = this.meta.getTables(this.catalog, tableSchema, pattern, this.tableTypes);
while (resultSet.next()) {Table table = new Table();# 返回nullString comment=resultSet.getString("REMARKS");
}
resultSet.close();

原因分析

google找了半天,总算知道原因:
Connector/J 5.0.0以后的版本有一个名为useInformationSchema的数据库连接参数,
在默认连接参数情况下,useInformationSchema=false,导致Connection.getMetaData()方法返回的DatabaseMetaData 对象是com.mysql.jdbc.DatabaseMetaData,而不是com.mysql.jdbc。DatabaseMetaDataUsingInfoSchema,
DatabaseMetaDataUsingInfoSchemaDatabaseMetaData是的子类,看名称就能联想到是通过 INFORMATION_SCHEMA 数据库获取数据库的metadata,可以正确返回table_comment字段。

下面是useInformationSchema的官方说明

useInformationSchema

When connected to MySQL-5.0.7 or newer, should the driver use the INFORMATION_SCHEMA to derive information used by DatabaseMetaData?

Default: false
Since version: 5.0.0
摘自《5.1 Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J》

而父类DatabaseMetaData并不一定能正常返回table_comment字段.

关于INFORMATION_SCHEMA 这里不深入探讨,参见《Chapter 24 INFORMATION_SCHEMA Tables》

解决方法

解决的方法也很简单:
数据库连接时设置useInformationSchema=true
如何设置数据库连接参数呢?有两个途径

方法一:java代码实现

# 将所有参数装入java.util.Properties 对象
Properties props = new Properties();
props.setProperty("username",this.username);
props.setProperty("password",this.password);
props.setProperty("useInformationSchema", "true");
# 调用getConnection(String,Properties)方法创建连接
this.pConnection = java.sql.DriverManager.getConnection(this.url, props);

方法二:连接url参数

直接将参数加到数据库连接url,如下代码中在数据连接url中添加了两个参数characterEncoding=utf8useInformationSchema=true

String url="jdbc:mysql://localhost:3306/test?characterEncoding=utf8&&useInformationSchema=true"
this.pConnection = DriverManager.getConnection(this.url, this.username,this.password);

关于mysql 连接URL的语法参见:
《5.1 Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J》

参考资料

《Connector/J does not retrieve the table comment in a InnoDB table》
《Retrieve mysql table comment using DatabaseMetaData》
《Chapter 24 INFORMATION_SCHEMA Tables》
《5.1 Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J》

mysql/jdbc:设置useInformationSchema=true读取表注释信息(table_comment)相关推荐

  1. jdbc mysql user_tab_comments_mysql/jdbc:设置useInformationSchema=true读取表注释信息(table_comment)...

    问题描述 今天在读取表的注释信息(COMMENT)时,发现返回的REMARKS字段返回居然是null. 以下是代码示例: DatabaseMetaData meta = this.pConnectio ...

  2. mysql in and in_完美解决mysql in条件语句只读取一条信息问题的2种方案

    今天同事在编写MYSQL查询语句时遇到一个很奇怪的问题,使用mysql多表查询,一个表中的某个字段作为另一表的in查询条件,只能读取一条信息,而直接用数字的话可以正常读取 SQL语句如下: selec ...

  3. mysql怎么设置每天定时清表_Mysql每天定时清空表

    Mysql每天定时清空表 1.设置开启event scheduler SET GLOBAL event_scheduler=1; 2.验证event_scheduler是否已经开启 show vari ...

  4. php mysql 字段备注_MySQL下读取 表/字段 的说明备注信息

    在MySQL下运行完下面这个建表语句后. 如何从数据字典中,检索出这个表的字段的相关信息? DROP TABLE IF EXISTS test_table; CREATE TABLE test_tab ...

  5. printk在应用层的设置方式及读取内核打印信息的方法

    如果 printk 中没有加调试级别,则使用默认的调试级别.注意,调试级别和格式化字符串之间没有逗号.当前控制台的各打印级别可以通过下面的命令来查看. # cat /proc/sys/kernel/p ...

  6. mysql出现1018错误,没有权限读取表

    一.遇到问题: 某天清晨,开开心心来上班,打开电脑点击navicat工具,点击mysql中的smsdb表,却出现了下面的提示: 当时瞬间就蒙蔽了,怎么会没有权限呢,用root登陆也出现该问题 二.解决 ...

  7. mysql查字段的备注_Mysql 查看表注释或字段注释

    查看所有表的注释 SELECT table_name 表名, table_comment 表说明 FROM information_schema.TABLES WHERE table_schema = ...

  8. oracle建表加compress,oracle 建表后添加表注释及字段注释

    oracle添加表注释和表字段注释 创建Oracle数据库表时候加上注释 CREATE TABLE t1( id  varchar2(32) primary key, name VARCHAR2(8) ...

  9. mysql数控不小心被删_mysql 数据库信息不小心被删除了, 请问能恢复么

    展开全部 自动备份,另一种方法请看 每个 DBA 是不是都有过删库的经历?删库了没有备份怎么办?备份恢复后无法启动服务什32313133353236313431303231363533e78988e6 ...

最新文章

  1. c语言inline详解
  2. 2018.9.8-9.8 统计学课程笔记(2)-参数统计
  3. F5 Priority Group Activation
  4. 每日一皮:宿舍阿姨眼中的单身狗...
  5. 【Python】随心所欲地用Python处理时间
  6. Mysql当前模式让不记录日志_MySQL日志binlog的三种模式
  7. 条件控制(if ) ( case)
  8. Linux下的一些简单网络配置命令介绍
  9. 网页嵌入对象(图片、视频、网页)
  10. 网页制作 css样式,网页设计与制作-CSS样式.ppt
  11. 设计师所需图标素材网站,不用到处找了,都在这!
  12. g2 折线图点与点之间直线_g2曲线图 每条曲线有单独的选中效果和tooltip
  13. 统计匹配检索规则的物品数量
  14. [转]PowerDesigner使用技巧
  15. 【PLSQL】PLSQL安装、破解以及汉化教程
  16. WP Super Cache远程代码执行漏洞分析
  17. 口碑、银盒子相关功能是否支持问题
  18. 纽约州立大学石溪分校计算机专业排名,纽约州立大学石溪分校排名怎么样?
  19. 通过access口加vlan标签吗_[转载]vlan与trunk打标签过程
  20. qpython3手机版turtle_使用Python turtle画一片树林

热门文章

  1. Linux kermit配置及使用
  2. VS2015使用WTL库的ribbon风格界面的注意事项
  3. iOS description方法的使用介绍
  4. 【统计计算】关于Jackknife的理解和推导
  5. idea2021运行内存扩大
  6. 邮件发送技巧:TO, CC, BCC(收件人、抄送、密送)
  7. 如何从VDS明网下载钱包
  8. Revit一款主要用于进行建筑信息建模的软件
  9. inject类型丢失问题
  10. 读书笔记—别让情绪毁了你(插图精读本)