mysql/jdbc:设置useInformationSchema=true读取表注释信息(table_comment)
来源:互联网 发布:日本古代吃什么知乎 编辑:程序博客网 时间:2024/05/22 12:32
问题描述
今天在读取表的注释信息(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(); # 返回null String 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
, DatabaseMetaDataUsingInfoSchema
是DatabaseMetaData
是的子类,看名称就能联想到是通过 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=utf8
和useInformationSchema=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)
- JDBC连接mysql提示noAccessToProcedureBodies=true
- mysql jdbc驱动设置fetchsize 要连接字串里有useCursorFetch=true 才行
- 查询设置oracle的表注释字段注释等信息
- JDBC 读取数据库中的表信息和字段信息
- java读取mysql表的注释及字段注释
- java读取mysql表的注释及字段注释
- mysql查询注释信息
- Hibernate连接数据库超时设置autoReconnect=true(Mysql)
- Mysql 连接数据库超时设置autoReconnect=true
- Mysql 设置超时重连 autoReconnect=true
- JDBC反射mysql信息
- jdbc反射mysql表信息与列信息
- idea设置注释作者信息
- idea设置注释创建者信息
- url=jdbc:mysql//localhost:3306/spring_dao?useUnicode=true&characterEncoding=UTF-8
- url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&characterSetResults=ut
- Mysql JDBC Url参数说明useUnicode=true&characterEncoding=UTF-8
- .framework 和.a区别
- .9图片报的错
- chm文档转html文件
- 线程私有关键字配合static使用
- VB.net 中界面与线程
- mysql/jdbc:设置useInformationSchema=true读取表注释信息(table_comment)
- Tensorflow学习:简单实现卷积神经网络(CNN)
- Angular基础(三) TypeScript
- Python中的__new__()方法的使用实例
- 服务器select与gevent
- java 数据交换
- JZOJ2017.08.14 B组
- Go语言学习笔记 --- reflection
- 蔡勒公式