出现的问题:
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'@%