【问题标题】:how to set the integer value for transaction isolation level如何设置事务隔离级别的整数值
【发布时间】:2011-12-27 03:40:48
【问题描述】:

当我打印隔离级别时

 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数据库

【问题讨论】:

    标签: java jdbc


    【解决方案1】:

    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;
    }
    

    【讨论】:

    • 是的,我从那里读到的只是我认为我应该将它设置为可串行化,因为它可以防止所有脏读问题等。但是整数和级别呢?我如何找出哪个整数指的是哪个级别的原因,如果它已经设置为可串行化,那么再次设置它是没有意义的;)
    • @Nav 是的,它可以防止所有这些,但性能/吞吐量也最低……我只是确保您了解权衡取舍。另外,如果我回答了您的问题,请接受它作为答案
    • @Panga 谢谢你的回答 +1 :) 但我想知道整数级别 conn.getTransactionIsolation() 我怎样才能使它更具可读性,因为我不知道这些整数指的是什么to.E.x 如果它显示默认情况下它支持 TRANSACTION_READ_COMMITTED 或你知道的东西
    • 您可以编写一个实用方法,该方法接受整数并返回隔离级别的可读字符串表示。我用示例代码更新了帖子
    • 因为我不需要知道每个整数映射到什么级别的隔离级别???
    猜你喜欢
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2016-03-29
    • 1970-01-01
    相关资源
    最近更新 更多