Я пытаюсь создать тупик базы данных, и я использую JUnit. У меня есть два одновременных теста, которые одновременно обновляют одну и ту же строку в таблице в цикле.Как создать блокировку базы данных с помощью jdbc и JUNIT
Моя идея заключается в том, что вы обновляете строку А в таблице А, а затем строку В в таблице В снова и снова в одном тесте. Затем в то же время вы обновляете таблицу B таблицы B, а затем снова и снова добавляете таблицу A A. По моему мнению, это должно в конечном итоге привести к тупиковой ситуации.
Вот код Для первого теста.
public static void testEditCC()
{
try{
int rows = 0;
int counter = 0;
int large=10000000;
Connection c=DataBase.getConnection();
while(counter<large)
{
int pid = 87855;
int cCode = 655;
String newCountry="Egypt";
int bpl = 0;
stmt = c.createStatement();
rows = stmt.executeUpdate("UPDATE main " + //create lock on main table
"SET BPL="+cCode+
"WHERE ID="+pid);
rows = stmt.executeUpdate("UPDATE BPL SET DESCRIPTION='SomeWhere' WHERE ID=602"); //create lock on bpl table
counter++;
}
assertTrue(rows == 1);
//rows = stmt.executeUpdate("Insert into BPL (ID, DESCRIPTION) VALUES ("+cCode+", '"+newCountry+"')");
}
catch(SQLException ex)
{
ex.printStackTrace();
//ex.getMessage();
}
}
И вот код для второго теста.
public static void testEditCC()
{
try{
int rows = 0;
int counter = 0;
int large=10000000;
Connection c=DataBase.getConnection();
while(counter<large)
{
int pid = 87855;
int cCode = 655;
String newCountry="Jordan";
int bpl = 0;
stmt = c.createStatement();
//stmt.close();
rows = stmt.executeUpdate("UPDATE BPL SET DESCRIPTION='SomeWhere' WHERE ID=602"); //create lock on bpl table
rows = stmt.executeUpdate("UPDATE main " + //create lock on main table
"SET BPL="+cCode+
"WHERE ID="+pid);
counter++;
}
assertTrue(rows == 1);
//rows = stmt.executeUpdate("Insert into BPL (ID, DESCRIPTION) VALUES ("+cCode+", '"+newCountry+"')");
}
catch(SQLException ex)
{
ex.printStackTrace();
}
}
Я бегу эти два отдельных тестов JUnit в то же время и я соединяюсь к базе данных Apache Derby, что я работает в сетевом режиме в Eclipse. Может ли кто-нибудь помочь мне понять, почему тупик не происходит? Возможно, я использую JUnit неправильно.
Как вы одновременно используете два метода тестирования? JUnit последовательно выполняет тестовые методы. –
У меня есть два тестовых примера JUnit и запустите их, затем переключитесь на другой и запустите его, и он показывает, как они работают. – Isawpalmetto
Я вижу. Какой уровень изоляции транзакций вы используете? –