ストアド プロシージャを呼び出すと、次の例外が発生します。
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 ;
これは、ローカル データベースで正しく動作しています。