更新数据库时出错:超出锁定等待超时

时间:2015-04-07 10:12:07

标签: java mysql xml java-ee

我使用MyBatis,我想更新数据库中的数据,插入查询有效,但我在更新时遇到此错误。

Error updating database.  Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost/test"/>
                <property name="username" value="root"/>
                <property name="password" value="***"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
      <mapper resource="config/UserMapper.xml"/>
    </mappers>
</configuration>

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserDao">
    <update id="update" parameterType="User">
        update user set adress_u = #{adress_u} where id_u = #{id_u}
    </update>
</mapper>  

Test.java

String adress_u = (String) request.getAttribute("adress_u");
int id_u = (Integer) request.getAttribute("id_u");

SqlSession session = MyBatisSqlSessionFactory.getSession();
User u = new User();
u.setId_u(id_u);
u.setAdress_u(adress_u);

session.update("dao.UserDao.update", u);
session.commit();
session.close();

感谢。

1 个答案:

答案 0 :(得分:0)

您应该考虑通过设置innodb_lock_wait_timeout来增加InnoDB的锁定等待超时值,默认为50秒

mysql> show variables like 'innodb_lock_wait_timeout';

您可以将其设置为更高的值并重新启动mysql:

SET GLOBAL innodb_lock_wait_timeout = 120;