Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle JDBC中的可序列化事务在提交后仍保持可序列化状态_Oracle_Jdbc_Commit_Serializable - Fatal编程技术网

Oracle JDBC中的可序列化事务在提交后仍保持可序列化状态

Oracle JDBC中的可序列化事务在提交后仍保持可序列化状态,oracle,jdbc,commit,serializable,Oracle,Jdbc,Commit,Serializable,我对JDBC和Oracle中的事务有问题。我有以下代码: con.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE); con.setAutoCommit(true); System.out.println(con.getTransactionIsolation()); con.commit(); System.out.println(con.getTransactionIsolation()); 问题是两个打印都显示:8(

我对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属性)。 有什么帮助吗?

您可以将commit()调用看作一个事务边界。因此,在提交之后,您将处于一个新事务中,并且仍然处于相同的隔离级别(在本例中可序列化)

顺便说一下,JDBC规范规定,当自动提交为true时调用commit()是非法的。JavaDoc for commit()中提到了这一点,如果启用了自动提交,它将引发异常:


您将使用12.1 Oracle JDBC驱动程序获得这种行为。以前的版本没有引发异常。

提交事务不会改变隔离级别。你想实现什么?我想他想知道为什么事务隔离级别在提交(终止事务)后不恢复为readcommitted。我想问题是,隔离级别的设置是事务级别属性吗?显然,这是conneciton的属性,而不是特定的事务。这似乎与SQL*Plus中的情况有所不同,在SQL*Plus中,隔离级别是事务本身的一个属性。在SQL developer中,当提交可序列化事务时,新事务将被读取提交。我想知道为什么在JDBC中,SERILIZABLE特性似乎是连接属性,而不是SQL Developer中的事务属性。这有意义吗?我的意思是,SERIALIZALE是一个事务属性,但如果我们执行commit,一个新的事务就会开始,所以它必须被读取和提交。是否有任何地方对其进行记录?非常感谢。当新事务开始时,它再次处于可序列化隔离状态,这意味着您将看不到通过其他连接提交的更改。在Oracle中,隔离是在会话上设置的,在整个会话中保持不变,除非您显式更改它。