最近换了mysql8,进行工程逆向。结果出现空指针异常。
原本逆向工程是亲测可用的。怎么更换了mysql8之后就出现问题了呢。
本着科学的态度,经过一番查找,发现在逆向时getTables查询出的表名,要比我创建的表多出来一个【clients】。其实不止多这一个表,是把所有库的表都查询出来了。导致进行逆向时,出现空指针异常。
然后到网上一顿扒,发现是因为使用的是mysql8的驱动包所导致的,mysql8的驱动包中,将nullcatalogmeanscurrent设定的默认值由true修改成了false。如果使用默认的databasemetadata.gettables方法,则默认查询所有库的表,而不是datasource指定的库的表。
解决方式,就是在初始化数据库链接时将nullcatalogmeanscurrent设定为true。
1:以hikaricp为例:
java config:
hikariconfig config = new hikariconfig();
...
config.adddatasourceproperty("nullcatalogmeanscurrent", true);
spring boot 配置:
pring.datasource.hikari.data-source-properties.nullcatalogmeanscurrent=true
2:如果使用的是jdbc的连接方式,需要在链接的url后面添加此参数。
url=jdbc:mysql://localhost:3306/demo?nullCatalogMeansCurrent=true
uname=root
pwd=root
driver=com.mysql.cj.jdbc.Driver