我在JDBC和Oracle中遇到了问题。我有以下代码:
con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
con.setAutoCommit(true);
System.out.println(con.getTransactionIsolation());
con.commit();
System.out.println(con.getTransactionIsolation());
问题是两个打印显示:8(对应于Connection.TRANSACTION_SERIALIZABLE属性)但我认为它必须打印8和2 Connection.TRANSACTION_READ_COMMITTED属性)。 有什么帮助吗?
答案 0 :(得分:1)
您可以将commit()调用视为事务边界。因此,在提交之后,您将处于新事务中,并且您仍将处于相同的隔离级别(在这种情况下为SERIALIZABLE)。
顺便说一句,JDBC规范规定在auto-commit为true时调用commit()是非法的。 JavaDoc for commit()中提到了这一点,如果启用了自动提交,则会抛出异常: http://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html#commit--
您将使用12.1 Oracle JDBC驱动程序获得该行为。以前的版本没有抛出异常。