Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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/67.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
java jdbc事务中超过了锁定等待超时_Java_Mysql_Jdbc - Fatal编程技术网

java jdbc事务中超过了锁定等待超时

java jdbc事务中超过了锁定等待超时,java,mysql,jdbc,Java,Mysql,Jdbc,我创建了这段代码,用于为3个表添加数据。但我得到一个错误,锁等待超时超过。在我的数据库中,我正在为takerslist、q_注册和测试表添加值。我从qBank和问题表中获取了一些数据。 takerlist外键是stdId。我认为这在这里并不重要。 q_enroll的外键是qId(参考文献问题表)、qBankId(参考文献QBank)和testId(参考文献测试) @覆盖 公共int add(测试e,连接)抛出SQLException、ClassNotFoundException、RemoteEx

我创建了这段代码,用于为3个表添加数据。但我得到一个错误,锁等待超时超过。在我的数据库中,我正在为takerslist、q_注册和测试表添加值。我从qBank和问题表中获取了一些数据。 takerlist外键是stdId。我认为这在这里并不重要。 q_enroll的外键是qId(参考文献问题表)、qBankId(参考文献QBank)和testId(参考文献测试)

@覆盖
公共int add(测试e,连接)抛出SQLException、ClassNotFoundException、RemoteException{
String query=“插入测试值(?,,,,,,,,?)”;
对象[]数据={e.getTestId(),e.getTestName(),e.getTestFrom(),e.getTestTo(),e.getTotalQuestions(),e.getTestDate(),e.getPassMark()};
试一试{
connection.setAutoCommit(false);
int res=DBHandle.setData(连接、查询、数据);
如果(分辨率>0){
List=e.getListTakers();
TakerListManagementModel takerListModel=新的TakerListManagementModel();
QuestionEnrollManagementModel enrollModel=新的QuestionEnrollManagementModel();
takerListModel.setAddCommonBehavior(true);
enrollModel.setAddCommonBehavior(true);
列表selQs=null;
字符串testId=null;
对于(TakerList tl:list){
int resTakers=takerListModel.performAdd(tl);
如果(重新启动>0){
selQs=e.getListQBanks();
testId=tl.getTestId();
}否则{
connection.rollback();
返回0;
}
}
对于(列表1:selQs){
用于(银行问题银行问题:列表1){
QuestionEnroll-enroll=新的QuestionEnroll(bankQuestion.getqId(),testId,bankQuestion.getqBankId());
int resQList=enrollModel.performAdd(注册);
if(resQList==0){
返回0;
}
}
}
commit();
返回1;
}否则{
connection.rollback();
返回0;
}
}catch(SQLException-ex){
connection.rollback();
掷骰子;
}最后{
connection.setAutoCommit(true);
}
}

您可以显式设置数据库的锁定超时(因为您的更新可能会使事务打开太长时间)。对于MySQL,您可以找到详细的说明

基本上,您可以在/etc/my.cnf中使用这样的命令设置它

[mysqld]
innodb_lock_wait_timeout=120
然后重新启动mysql。如果此时无法重新启动mysql,请运行以下命令:

SET GLOBAL innodb_lock_wait_timeout = 120; 
您也可以在会话期间设置它

SET innodb_lock_wait_timeout = 120; 

它是什么类型的数据库?MySQL和我使用的是MySQL jdbc库我已经执行了设置全局innodb\u lock\u wait\u timeout=120;设置innodb_lock_wait_timeout=120;在mySQL命令行客户端中。但我仍然有问题,也许你需要一个更大的值?我设置了1000;但是我仍然有问题,如果你想使用connection.setAutoCommit(true),在执行语句之前使用它,而不是在finally中block@Kris完成更新后,他正在恢复自动提交状态
SET innodb_lock_wait_timeout = 120;