0

ストアド プロシージャを呼び出すと、次の例外が発生します。

SQLException1 java.sql.SQLException: ユーザーは、ストアド プロシージャのパラメータ タイプを決定するために必要なメタデータにアクセスできません。権限を付与できない場合は、「noAccessToProcedureBodies=true」で接続を構成して、実際のパラメーターの種類に関係なく、ドライバーが INOUT 文字列を表すパラメーターを生成するようにします。

これを解決するために、私は試しました:

Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306
/database?useInformationSchema=true&noAccessToProcedureBodies=true", 
"user_name", "pasword");

しかし、それでもうまくいきません。

共有ホスティングを使用しています。

私は使っている

  • ソフトウェア バージョン: 5.0.91-community-log - MySQL Community Edition (GPL)
  • プロトコル バージョン: 10
  • Java 1.6
  • mysql-connector-java-5.1.14-bin.jar

私のストアドプロシージャの1つは次のとおりです。

DROP PROCEDURE IF EXISTS `share_message` 

DELIMITER //


CREATE PROCEDURE share_message(in messageid1 int(200),in received_by1 int(20),
in sent_by1 int(20),in shared_of1 int(20),author1 int(20), OUT query_status1 TINYINT)

BEGIN


DECLARE EXIT HANDLER FOR SQLEXCEPTION 
  BEGIN
    -- ERROR
   SET query_status1 = -1;
    rollback;
  END;

DECLARE EXIT HANDLER FOR SQLWARNING
  BEGIN
    -- WARNING
   SET query_status1 = -1;
    rollback;
  END;

START TRANSACTION;
SET query_status1 = 0;



INSERT INTO post_message_users(messageid,received_by,sent_by,shared_of,author) 
VALUES(messageid1,received_by1,sent_by1,shared_of1,author1);

UPDATE  post_messages SET total_share=total_share+1 WHERE messageid=messageid1;


SET query_status1 =1;


COMMIT;
END//

DELIMITER ;

これは、ローカル データベースで正しく動作しています。

4

2 に答える 2

0

使用しようとしているストアド プロシージャには、MySQL の へのアクセスが必要なようINFORMATION_SCHEMAです。これは、すべての MySQL サーバーに組み込まれている (偽の) データベースです。テーブル、列、インデックスなどの説明を取得するために使用されます。

使用しているユーザー ID には へのアクセス権がないようですINFORMATION_SCHEMA。これは、ホスティング サービスでは理解できます。

MyPhpAdmin にアクセスして、このようなクエリを試してください。

 SELECT table_schema, table_name
   FROM information_schema.columns       
  WHERE column_name = 'something'
    AND table_schema = 'your database name'

権限がないという何らかのエラーが表示された場合、これは間違いなく問題です。

ストアド プロシージャを書き直してみるか、ホスティング サービスに適切な特権を付与するよう依頼することができます。

于 2013-06-26T14:50:33.190 に答える
0

TLDR; Java コードを変更し、CallableStatement が名前ではなくインデックスでパラメーターを参照するようにします。

同様の問題が発生した後、JDBC ドライバー mysql-connector-java-5.1.26-bin.jar を更新しました。その後、エラーは次のように変更されました

ユーザーは、ストアド プロシージャのパラメータ タイプを決定するために必要なメタデータにアクセスできません。権限を付与できない場合は、「noAccessToProcedureBodies=true」で接続を構成して、実際のパラメーターの種類に関係なく、ドライバーが INOUT 文字列を表すパラメーターを生成するようにします。

プロシージャ本体にアクセスしないように接続が構成されている場合、名前によるパラメータへのアクセスはありません

名前ではなくインデックスでパラメーターを参照するように Callable ステートメントを変更しました。

メタデータへのアクセスや定期的な本文へのアクセスがない場合は、名前の代わりにインデックスを使用することを知っているだけで、ドライバーを更新する必要はないかもしれません。

幸運を

于 2013-08-02T13:23:25.233 に答える