转: databasemetadata 无法获取数据库表备注的解决方法
转自: https://blog.csdn.net/10km/article/details/77389038
mysql/jdbc:设置useInformationSchema=true读取表注释信息(table_comment)
问题描述
今天在读取表的注释信息(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();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
原因分析
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);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
方法二:连接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);
- 1
- 2
关于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》
转: databasemetadata 无法获取数据库表备注的解决方法相关推荐
- Java获取数据库表的字段信息,及如何将ResultSet转为json
为什么80%的码农都做不了架构师?>>> 一.Java获取数据库表的各个字段的相关信息 在某些开发情景中,需要获取数据库中表的各个字段的相关信息,如字段名,字段类型,字段大小等 ...
- ASP获取数据库表名,字段名以及对字段的一些操作
最近,在ASP论坛上看到很多网友问怎么获取数据库表名,字段名以及如何对字段进行删除,增添的操作故写此文. 本人对SQLServer比较熟一些,故以SQLServer为列: <% ...
- springboot结合注解动态获取数据库表
springboot结合注解动态获取数据库表 1 对于分表的处理,可以通过Mybatis-Plus动态表名插件(DynamicTableNameInnerInterceptor)来实现,实现的思路主要 ...
- php 获取数据库中的信息,php获取数据库中数据的实现方法
废话不多说,直接上代码 header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "lo ...
- informix 数据库锁表分析和解决方法
informix 数据库锁表分析和解决方法 参考文章: (1)informix 数据库锁表分析和解决方法 (2)https://www.cnblogs.com/kongzhongqijing/arti ...
- 获取库中的所有字段的描述/获取某个表中所有字段方法
--获取库中的所有字段的描述 SELECT [Table Name] = OBJECT_NAME(c.object_id), [Column Name] = c.name, ...
- 总结 db visualizer连接GBase8s数据库报-908错误解决方法
总结 db visualizer连接GBase8s数据库报-908错误解决方法 检查数据库实例是否正常运行:在服务器端使用informix用户执行命令onstat – 检查dbaccess命令能否正常 ...
- mysql锁表_MYSQL锁表问题的解决方法
本文实例讲述了MYSQL锁表问题的解决方法.分享给大家供大家参考,具体如下: 很多时候!一不小心就锁表!这里讲解决锁表终极方法! 案例一 mysql>show processlist; 参看sq ...
- pycharm连接mysql1193错误_pycharm连接mysql数据库提示错误的解决方法_数据库
忘记phpmyadmin密码怎么重置_数据库 重置phpmyadmin密码的方法是:1.停止mysql服务:2.跳过验证启动mysql:3.重新设置密码:4.更新权限:5.重新启动mysql,如[ki ...
最新文章
- NYOJ 287 Radar 贪心之 区间选点
- codeforces B. High School: Become Human
- 思科、华为交换机的一些命令
- RabbitMq 安装
- 开发板屏幕截图-适用于本公司海思和智源平台
- c_str()的用法
- 【月报】Java知音的四月汇总
- .net System.IO之Stream的使用详解
- 运行时库(runtime library)
- python中math isnan_带有Python示例的math.isnan()方法
- 朱松纯教授:可解释性是人工智能获得人类信任的关键
- 从小码农走到区块链DeFi核心,AC的加密旅程落幕
- 多益2980邮箱集合专业游戏服务免费安全的电子邮箱
- C语言中system函数用法解释
- 总结下我两个移动硬盘坏掉的经历...
- 微信小程序开发学习文档(万字总结,一篇搞定前端开发)
- 使用ESXCLI将ESXi 6.5或6.7升级到ESXi 7.0
- 所示零件是减速器中的传动轴
- 基于SSM的在线教育系统的设计与实现【附源码】
- 用zt-zip Java库进行zip文件处理
热门文章
- HDU - 7072 Boring data structure problem 双端队列 + 思维
- Codeforces Round #588 (Div. 2) D. Marcin and Training Camp 思维
- Codeforces Round #635 (Div. 1) C. Kaavi and Magic Spell 区间dp
- P2480 [SDOI2010]古代猪文(数论好题)
- LCS(2021牛客多校4)
- 牛客网【每日一题】5月1日题目 [SCOI2012]滑雪与时间胶囊
- 洛谷P1650:田忌赛马(贪心)
- 粉刷木板(ybtoj-单调队列)
- hdu5709-Claris Loves Painting【线段树合并】
- P4313-文理分科【最小割】