Блокировка таблицы в базе данных oracle с использованием драйвера JDBC - PullRequest
3 голосов
/ 20 декабря 2011

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

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, и после того, как я выполнил эту блокировку, я сплю поток во время ручного тестирования страницы, может ли это вызывать проблемы?

1 Ответ

9 голосов
/ 20 декабря 2011

Документация оракула гласит:

Вы используете инструкцию 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...