2011-12-20 3 views
3

Я пытаюсь заблокировать таблицу в своей структуре тестирования, чтобы вызвать таймауты. Для блокировки таблицы я использую следующий код.Заблокировать таблицу в базе данных оракула с помощью драйвера JDBC

String lock = "lock table "+ tableName +" in exclusive mode"; 
try { 
     connection = DriverManager.getConnection(_url, _username, _password); 
     connection.setAutoCommit(false); 
     Statement stmt1=connection.createStatement(); 
     stmt1.executeUpdate(lock); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 

После того как я выполнил это, я попытаюсь открыть страницу и добавить элемент в учетную запись. Однако это не работает, блокировка, похоже, не произошла. Любая идея, почему это не сработает? В настоящее время я тестирую это в java, и как только я выполнил эту блокировку, я сплю нить при ручном тестировании страницы, может ли это вызвать проблемы?

Спасибо, Джеймс

ответ

7

документация оракул говорит:

используется оператором LOCK TABLE для блокировки всей таблицы базы данных в режиме указанного замка, так что вы можете поделиться или запретить доступ к ним .. Строка блокировки совместного доступа позволяют одновременный доступ к таблице; они не позволяют другим пользователям блокировать всю таблицу для исключительного использования. Стоп-блокировки - это , когда ваша транзакция выдает фиксацию или откат.

Таким образом, вам необходимо начать транзакцию и сохранить ее. Следующий код поддерживает таблицу, заблокированную в течение одной минуты:

String lock = "lock table "+ tableName +" in exclusive mode"; 
try { 
    connection = DriverManager.getConnection(_url, _username, _password); 
    connection.setAutoCommit(false); 
    Statement stmt1=connection.createStatement(); 
    stmt1.execute(lock); 
    int i = 0; 
    while (i<60) {    
     Thread.sleep(1000); //Sleep one second 
     i++;     
    } 
    connection.commit(); 

} catch (SQLException e) { 
    connection.rollback(); 
    e.printStackTrace(); 
} 
+0

Не могу ли я заблокировать ее, а затем оставить ее заблокированной до тех пор, пока я откачусь? Мне нужно заблокировать его, выполняя другие команды java, и предпочел бы не создавать поток здесь. – James

+0

Я уверен, что мне нужно быть более либеральным при определении того, является ли ответ «ответом», – James

Смежные вопросы