Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql存储过程在java中不工作_Java_Mysql - Fatal编程技术网

Mysql存储过程在java中不工作

Mysql存储过程在java中不工作,java,mysql,Java,Mysql,我的mysql过程工作得很好,但有时当我从java类调用它时,它会挂起 我的mysql过程如下 DELIMITER $$ DROP PROCEDURE IF EXISTS `expense`.`user_updation`$$ CREATE DEFINER=`root`@`%` PROCEDURE `user_updation`(IN `I_user_id` VARCHAR(10), IN `I_USER_PASSWORD` VARCHAR(200), OUT `o_error_flag`

我的mysql过程工作得很好,但有时当我从java类调用它时,它会挂起 我的mysql过程如下

DELIMITER $$

DROP PROCEDURE IF EXISTS `expense`.`user_updation`$$

CREATE DEFINER=`root`@`%` PROCEDURE `user_updation`(IN `I_user_id` VARCHAR(10), IN `I_USER_PASSWORD` VARCHAR(200), OUT `o_error_flag` VARCHAR(1), OUT `o_error_msg` VARCHAR(100), OUT `o_user_email` VARCHAR(50))
begin 
declare v_user_password1 varchar(200);
declare v_user_password2 varchar(200);
declare v_user_password3 varchar(200);
declare v_user_password4 varchar(200);
declare v_user_password varchar(200); 
declare v_user_email varchar(50); 
declare v_rec_status varchar(50);
 DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;
        SET O_ERROR_FLAG = 'E';
        SET O_ERROR_MSG = 'UNKNOWN EXCEPTION IN SQL EXECUTION, CONTACT SYSTEM ADMINISTRATOR...';
    END;
 DECLARE EXIT HANDLER FOR 1205
    BEGIN
        ROLLBACK; 
        SET O_ERROR_FLAG = 'E';
        SET O_ERROR_MSG = 'RECH_AUTHOR-RECORD IS LOCKED BY SOME OTHER USER, TRY AFTER SOME TIME';
    END;
    select STATUS into v_rec_status from user_m where USER_NAME=I_user_id;
    IF v_rec_status='X'
    THEN
    SET O_ERROR_FLAG = 'E';
    SET O_ERROR_MSG='USER IS INACTIVE IN SYSTEM';
ELSE
    SET AUTOCOMMIT=0;
    SET O_ERROR_FLAG = 'S';
    SET O_ERROR_MSG = 'SUCCESSFULLY';
    
select EMAIL_ID,password,USER_LAST_PASSWORD_1,USER_LAST_PASSWORD_2,USER_LAST_PASSWORD_3,USER_LAST_PASSWORD_4
INTO v_user_email,v_user_password,v_user_password1,v_user_password2,v_user_password3,v_user_password4 from user_m  where user_NAME=I_user_id limit 1;
SET o_USER_EMAIL=v_user_email;
update user_m set
        PASSWORD=I_USER_PASSWORD,   
        USER_LAST_PASSWORD_1=v_user_password,
        USER_LAST_PASSWORD_2=v_user_password1,
        USER_LAST_PASSWORD_3=v_user_password2,
        USER_LAST_PASSWORD_4=v_user_password3,
        USER_LAST_PASSWORD_5=v_user_password4,
        LAST_PASSWORD_DATE=Date(now()),
        ACCOUNT_STATUS='U',
                FORCED_PASSWORD_FLAG='Y',
                PASS_COUNT=0
where user_name=I_user_id ;
END IF;
end$$

DELIMITER ;
Java类是

 public String setpassword(Procedurecall pro,String userid, String pass) throws SQLException
     {
         System.out.println(userid);
         System.out.println(pass);
        
        try { Connection connection;
          connection = template.getDataSource().getConnection();
          CallableStatement callableStatement = connection.prepareCall("{call user_updation(?, ?, ?,?,?)}");
          callableStatement.setString(1, userid);
          callableStatement.setString(2, pass);
          callableStatement.registerOutParameter(3, Types.VARCHAR);
          callableStatement.registerOutParameter(4, Types.VARCHAR);
          callableStatement.registerOutParameter(5, Types.VARCHAR);
          callableStatement.executeUpdate();
          String is_error = callableStatement.getString(3);
          String msg = callableStatement.getString(4);
          String email = callableStatement.getString(5);
          pro.setIs_error(is_error);
          pro.setMsg(msg);
          pro.setEmail(email);
          
          System.out.println("-------------------------Procedure return status "+is_error+"-------------------- Message "+msg);
          return is_error;
        }
        catch(Exception e)
        {
            System.out.println("===========================Internal Server Error==========" +e);
            return "400";
        }
     }
运行java代码时,不会显示任何错误,也不会执行任何更新。程序不起作用。 所以我试着直接调用这个过程

call user_updation('shah1234','passwordisgood',@f,@m,@e);
select @f,@m,@e;
错误消息是

RECH_AUTHOR-RECORD IS LOCKED BY SOME OTHER USER, TRY AFTER SOME TIME
这个错误实际上是错误的

Lock wait timeout exceeded. Try restarting transaction.
而且,如果我尝试更新任何其他表,我会得到相同的错误,似乎我不能使用任何DML查询。 论使用
显示全局变量,如“innodb\u回滚\u超时”

我把
关了
。我想解决办法是打开它,我使用的是wampp,我检查了mysql.ini。我在那里找不到变量

Use
SHOW ENGINE INNODB STATUS查看导致锁定的原因结果是type->Innodb,但名称和状态为空,使用
显示全局变量,如“Innodb\u rollback\u on\u timeout”我下车。我想解决办法是打开它,我使用的是wampp,我检查了mysql.ini。我在那里找不到变量现在我重新启动了服务器,再次调用该过程不起作用,所以我执行了很多次
commit
,现在该过程只有在直接调用时才起作用,如果我再次从java调用它,问题将再次开始。您有一个
设置AUTOCOMMIT=0在过程中没有提交/自动提交=1。除非您在其他地方提交,否则最终将回滚/在其他会话中可能不可见/将锁定行,直到提交/回滚。。。这可能解释了(某些)观察到的行为查看导致锁定的原因结果是type->Innodb,但名称和状态为空,使用
显示全局变量,如“Innodb\u rollback\u on\u timeout”我下车。我想解决办法是打开它,我使用的是wampp,我检查了mysql.ini。我在那里找不到变量现在我重新启动了服务器,再次调用该过程不起作用,所以我执行了很多次
commit
,现在该过程只有在直接调用时才起作用,如果我再次从java调用它,问题将再次开始。您有一个
设置AUTOCOMMIT=0在过程中没有提交/自动提交=1。除非您在其他地方提交,否则最终将回滚/在其他会话中可能不可见/将锁定行,直到提交/回滚。。。这可以解释(某些)观察到的行为。