分类: MySQL

MySQL报错“noAccessToProcedureBodies=true”解决方法

  MySQL执行存储过程的时候,报错“ 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.”

  解决方法如下:

1、为连接MySQL的这个数据库用户分配“获取存储过程元数据(MetaData)”的权限,即有mysql.proc表的select权限,如下:
GRANT SELECT ON mysql.proc TO TO 'myuser'@'myhost';
推荐用这个方法;

2、给数据库连接设置一个noAccessToProcedureBodies属性,属性值为true,示例如下:

jdbc:mysql://ipaddress:3306/test?noAccessToProcedureBodies=true

设置noAccessToProcedureBodies=true以后的影响:

  1. 调用存储过程时,将没有类型检查,设为字符串类型,并且所有的参数设为in类型,但是在调用registerOutParameter时,不抛出异常。
  2. 存储过程的查询结果无法使用getXXX(String parameterName)的形式获取,只能通过getXXX(int parameterIndex)的方式获取。

参考:
http://bugs.mysql.com/bug.php?id=20235
http://bugs.mysql.com/bug.php?id=24065

相关文章

发表新评论