JavaストアドプロシージャをJavaから実行できません



Answers

次のステップはmysqlで私のために働いた

ステップ1:follwongを追加する
接続con = DriverManager.getConnection( "jdbc:mysql:// ipaddress:3306 / logparser?noAccessToProcedureBody = true"、 "root"、 "");

ステップ2: logparserます。 proc TO @ '%'; logparserはDB名、procはプロシージャ名です。

Question

私は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.<init>(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をインストールした後。 私はルートに次の許可オプションを与えました

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オプションを含むURLを試しました。

誰かがここで何が間違っているか教えてくれますか? 私がチェックする必要があるものはありますか?




mysql.procテーブルの定義者をデータベースユーザに変更することができます。

mysql.procから*を選択します。

問題のあるストアドプロシージャを選択し、定義者を 'yourdbuser' @ 'localhost'に変更します。




Related