2011-12-26 123 views
0

当我打印的隔离级别如何设置事务隔离级别的整数值

DatabaseMetaData dbMetaData = conn.getMetaData(); 
      if (dbMetaData       .supportsTransactionIsolationLevel(Connection.TRANSACTION_SERIALIZABLE)) { 
        System.out.println("Transaction Isolation level= " 
            + conn.getTransactionIsolation()); 
        System.out.println(dbMetaData.getDefaultTransactionIsolation()); 
      } 

的连接,我得到一个整数值4 和数据库,我收到了价值2

我希望将隔离级别设置为SERIALIZABLE,因为它似乎适用于大多数问题(这正是我所听到的: - /)但我没有弄清楚如何将它设置为它的int值

conn.setTransactionIsolation(level); 

整数级别指什么以及交易级别的顺序是什么?我正在使用mysql数据库

回答

2

Connection类应该将所有隔离级别定义为常量。去Javadoc,你可以看到常量。

conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); 

注意:TRANSACTION_SERIALIZABLE可能不是您想要的那个。我建议你阅读this tutorial

打印可读的字符串

String getReadableLevel(int isolation) 
{ 
String result=""; 

switch(isolation) 
{ 
    case Connection.TRANSACTION_SERIALIZABLE: result="TRANSACTION_SERIALIZABLE";break; 
    ...//u get the idea 
} 
return result; 
} 
+0

是啊,我读了从那里只有我想因为它可以防止所有的脏读问题等。但对于整数和水平,我应该把它设置为seriliazable ???我如何找出哪个整数引用哪个级别,如果它已经设置为seriliazable,则将其设置为再次正确无用;) – Nav 2011-12-26 19:24:29

+0

@Nav是的,它可以防止所有这些,但性能/吞吐量也最低。我只是确保你意识到这些权衡。另外,如果我回答你的问题,那么请接受它作为答案 – 2011-12-26 19:26:18

+0

@Panga谢谢你的答案+1 :)但我想知道整数水平conn.getTransactionIsolation()我怎么能使这个更可读的原因我不不知道这些整数是指什么。如果它显示默认情况下它支持TRANSACTION_READ_COMMITTED或者你知道 – Nav 2011-12-26 19:33:07

相关问题