我试图在我的测试框架中锁定一个表,以触发超时.我使用以下代码来锁定表.
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中测试这个,一旦我执行了那个锁,我在手动测试页面的时候就在睡觉了,这会导致问题吗?
谢谢,詹姆斯
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)
| 归档时间: |
|
| 查看次数: |
17394 次 |
| 最近记录: |