我对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属性)。有什么帮助吗?
发布于 2015-05-14 02:36:08
您可以将commit()调用看作是一个事务边界。因此,在提交之后,您将处于新的事务中,并且仍然处于相同的隔离级别(在本例中为SERIALIZABLE)。
顺便说一句,JDBC规范规定,当自动提交为true时调用commit()是非法的。在commit()的JavaDoc中提到了这一点,如果启用了自动提交,它将抛出异常:http://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html#commit--
您将使用12.1 Oracle JDBC驱动程序获得该行为。以前的版本没有抛出异常。
https://stackoverflow.com/questions/30221118
复制相似问题