2015-07-04 25 views
0


什么选项可以?为什么DataBase的隔离级别没有改变? 我有本地数据库,并连接到他们:setTransactionIsolation()不起作用

connect = DriverManager.getConnection("jdbc:sqlserver://" 
         + "localhost;IntegratedSecurity=True;" 
         + "databaseName=" + TestsConstants.DB_NAME + "; "); 

然后我用一套TRANSACTION_READ_UNCOMMITTED水平这个方法:

public static void setTransaction() { 
    try { 
     connect.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED); 
     connect.setAutoCommit(false); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

我重新检查隔离级别:

System.out.println(connect.getTransactionIsolation()); 

和接收1 。 那就对了。
然后我在我的数据库中插入一些数据,然后停在我的Java代码中的BreackPoint上。
交易尚未结束。

现在我尝试从其他进程的SELECT运算符读取数据,例如从“Microsoft SQL Server Management Studio”或“Micosoft Visual Studio”或从本地Web站点读取数据。它失败了。
查询执行冻结,直到事务不是从Java代码提交。

请帮帮我,这个算法有什么问题?
对于来自数据库的READ_UNCOMMITTED更改,我能做些什么?

+0

对由Java程序启动的事务设置READ_UNCOMMITTED不会更改Visual Studio使用的事务的隔离级别。如果Visual Studio仍然使用READ_COMMITTED,那么查询冻结直到Java事务结束,这并不奇怪。 –

+0

您翻开了我对隔离级别的理解。所以,我没有设置我的事务隔离,而是设置了我的事务的隔离渗透能力。谢谢,它的工作! –

回答

0

通过这种方式,我设置了隔离穿透功能,但不隔离它。
要从另一个事务处理数据,我必须更改此另一个事务的隔离级别。