使用JDBC驱动程序在oracle数据库中锁定表

Jam*_*mes 3 java 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();
    }
Run Code Online (Sandbox Code Playgroud)

执行此操作后,我尝试访问该页面并向该帐户添加元素.但是它不起作用,锁似乎没有发生.知道为什么这不起作用吗?我目前正在java中测试这个,一旦我执行了那个锁,我在手动测试页面的时候就在睡觉了,这会导致问题吗?

谢谢,詹姆斯

Ern*_*oso 9

oracle的文档说:

您使用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();
}
Run Code Online (Sandbox Code Playgroud)