调用存储过程会导致此异常:
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 社区版 (GPL)
- 协议版本:10
- Java 1.6
- mysql-connector-java-5.1.14-bin.jar
我的存储过程之一是:
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 ;
这与我的本地数据库正常工作。