2011-12-26 62 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