自动提交错误模式java

自动提交错误模式java,java,jdbc,Java,Jdbc,我不太确定JavaJDBC的自动提交模式,我正在创建一个自动提交模式设置为false的连接。之后,我对数据库启动了一个select查询,该查询运行良好,我的印象是,只有insert、update和delete语句才需要调用commit 现在我需要提交Select查询的连接吗?如果不是,该表是否会被其他事务锁定 谢谢, Rohit.这取决于您的隔离级别。如果使用READ COMMITTED,SELECT仅在指定SELECT FOR UPDATE时创建锁。如果使用REPEATABLE READ或更高

我不太确定JavaJDBC的自动提交模式,我正在创建一个自动提交模式设置为false的连接。之后,我对数据库启动了一个select查询,该查询运行良好,我的印象是,只有insert、update和delete语句才需要调用commit

现在我需要提交Select查询的连接吗?如果不是,该表是否会被其他事务锁定

谢谢,
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我指的是常规选择。我在回复中指出,在任何情况下,选择更新都会创建锁。在
可重复读取
隔离模型中,常规选择不会创建锁。隔离模式遵循未限制的更改以及选择受此更改影响的数据的规则。