自动提交错误模式java
我不太确定JavaJDBC的自动提交模式,我正在创建一个自动提交模式设置为false的连接。之后,我对数据库启动了一个select查询,该查询运行良好,我的印象是,只有insert、update和delete语句才需要调用commit 现在我需要提交Select查询的连接吗?如果不是,该表是否会被其他事务锁定 谢谢,自动提交错误模式java,java,jdbc,Java,Jdbc,我不太确定JavaJDBC的自动提交模式,我正在创建一个自动提交模式设置为false的连接。之后,我对数据库启动了一个select查询,该查询运行良好,我的印象是,只有insert、update和delete语句才需要调用commit 现在我需要提交Select查询的连接吗?如果不是,该表是否会被其他事务锁定 谢谢, Rohit.这取决于您的隔离级别。如果使用READ COMMITTED,SELECT仅在指定SELECT FOR UPDATE时创建锁。如果使用REPEATABLE READ或更高
Rohit.这取决于您的隔离级别。如果使用
READ COMMITTED
,SELECT
仅在指定SELECT FOR UPDATE
时创建锁。如果使用REPEATABLE READ
或更高版本,则每次SELECT
都会创建一个锁(取决于您的数据库型号)
我不太确定JavaJDBC的自动提交模式,我正在创建一个自动提交模式设置为false的连接。之后,我对数据库启动了一个select查询,该查询运行良好,我的印象是,只有insert、update和delete语句才需要调用commit
这取决于你的申请。如果有简单的更新、插入、删除,您可以保持autocommit=on。通常,建议关闭自动提交。这种配置使您在应用中具有更大的灵活性和能力。您可以使用复杂的事务,并且可以决定事务何时开始和何时结束
现在我需要提交Select查询的连接吗?如果不是,该表是否会被其他事务锁定
否,select STATTE不开始事务(插入、更新、删除开始),因此在select STATTE之后不需要提交/回滚。有一种特殊情况是选择锁定所选行并需要事务-这是不正确的。所有JDBC语句始终在事务上下文中执行,包括SELECT。您确定吗?若select查询将开始事务,它将为其他选择阻止数据。Select可以在现有事务中运行,但不要开始新事务。@cetnar-我是肯定的。对数据库执行的任何语句(包括SELECTs)都在事务上下文中执行。任何语句(在某些情况下不包括DDL)都可以在提交/回滚上一个事务(如果有)后在现有事务或新的(单独的)事务中运行。有关更多详细信息,请参阅JDBC教程()或规范。@ChssPly-我试图更精确一些。有些select语句需要提交或回滚(对于update或dbLink selects)。Java连接接口的实现不解析语句,所以每个语句之后都是一个提交。从数据库方面来说,若您提交一个常规的select语句,那个么并没有什么变化,所以在我看来,提交是不必要的。在SQLPlus中选择后是否提交?问题是
现在我需要提交Select查询的连接吗?如果没有,该表是否会被其他事务锁定?
-我的回答是否。如果您将执行提交操作,则不会发生任何错误-关于创建锁定的select STATTION没有任何内容。锁是由DML语句创建的。如果您在Oracle数据库上执行“选择更新”,则第二个事务会阻塞(等待锁),如果它在同一记录上执行“选择更新”。@tangens我指的是常规选择。我在回复中指出,在任何情况下,选择更新都会创建锁。在可重复读取
隔离模型中,常规选择不会创建锁。隔离模式遵循未限制的更改以及选择受此更改影响的数据的规则。