当前位置:  开发笔记 > 编程语言 > 正文

无法从Java执行MySQL存储过程

如何解决《无法从Java执行MySQL存储过程》经验,为你挑选了1个好方法。

我正在从运行在tomcat中的Web应用程序连接到Linux机器上运行的MySQL(5.08)数据库.

我尝试执行存储过程时收到以下异常:

com.hp.hpl.chaos.web.exception.DBException: getNextValue for operatorinstance[Additional Information from SQL Exception][SQLErrorCode: 0 SQLState: S1000
    at com.hp.hpl.chaos.web.util.SQLUtil.getNextValue(SQLUtil.java:207)
        ..............

Caused by: 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.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.DatabaseMetaData.getCallStmtParameterTypes(DatabaseMetaData.java:1619)
at com.mysql.jdbc.DatabaseMetaData.getProcedureColumns(DatabaseMetaData.java:4034)
at com.mysql.jdbc.CallableStatement.determineParameterTypes(CallableStatement.java:709)
at com.mysql.jdbc.CallableStatement.(CallableStatement.java:513)
at com.mysql.jdbc.Connection.parseCallableStatement(Connection.java:4583)
at com.mysql.jdbc.Connection.prepareCall(Connection.java:4657)
at com.mysql.jdbc.Connection.prepareCall(Connection.java:4631)
at com.hp.hpl.chaos.web.util.SQLUtil.getNextValue(SQLUtil.java:196)
... 17 more

在机器上安装mysql之后.我已经给了root的后续授权选项

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'pass';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

在java类中..

我按如下方式连接到db:

String url = "jdbc:mysql://ipaddress:3306/test";
                con = DriverManager.getConnection(url,"root", "pass");

我也尝试了noAccessToProcedureBodies=true包含选项的网址.

谁能告诉我这里有什么问题?有什么我需要检查的吗?



1> Josef Pflege..:

有两种方法可以解决这个问题:

    设置连接的noAccessToProcedureBodies=true属性

    例如,作为连接字符串的一部分:

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

    然后,JDBC驱动程序将为参数创建"INOUT"字符串,而不需要像异常所说的元数据.

    授予SELECT特权mysql.proc的数据库用户

    例如在mysql提示符中:

    GRANT SELECT ON mysql.proc TO 'user'@'localhost';
    

    当然,这将允许应用程序读取mysql.proc包含所有数据库中所有存储过程(包括源代码)的信息的整个表.


这个(以及http://stackoverflow.com/q/1880461/7708)是我不喜欢使用MySQL的例子.
推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有