JDBC连接mysql提示noAccessToProcedureBodies=true

出现的问题:
ERROR, Thread-4, com.adwo.test.db.DBOpt, 2017-03-07 10:05:38,773, - ,java.sql.SQLException: User does not have access to metadata required to determine stored procedure parameter types. If rights can not be granted, configure connection with “noAccessToProcedureBodies=true” to have driver generate parameters that represent INOUT strings irregardless of actual parameter types.

解释:
   这是因为jdbc调用存储过程时需要有show create procudure权限或是有表mysql.proc的select的权限

解决方法:
1.通过在jdbc连接属性中设置noAccessToProcedureBodies=true(默认是false)。但是加该参数会有影响
- 调用存储过程时,将没有类型检查,设为字符串类型,并且所有的参数设为in类型,但是在调用registerOutParameter时,不抛出异常
- 存储过程的查询结果无法使用getXXX(String parameterName)的形式获取,只能通过getXXX(int parameterIndex)的方式获取

2.参考https://lists.mysql.com/commits/17817 修改

3.给mysql 普通用户授予相应的权限

#%可以换localhost或者127.0.0.1,看自己的情况而定
grant Select on mysql.proc to 'user'@%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值