- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是典型的项目结构,一旦用户登录到应用程序,就会创建数据库连接。
Login.java{
Creating DB Connection
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
java.sql.Connection conn = DriverManager.getConnection(url, strUserDB, strPasswordDB);
CustomSession customSession = new CustomSession();
customSession.setConnectionDB(conn);
}
CustomSession.java{
private Connection conDBConnection;
// getter, setter
}
SubmitAction{
method1(ActionMapping map,
ActionForm form, HttpServletRequest request,
HttpServletResponse response)
Connection conDB = null;
CustomSession customSession = null;
AService aservice = null;
BService bservice = null;
CService cservice = null;
HttpSession session = request.getSession(false);
try{
customSession = (Connection) session.getAttribute("customSession");
conDB = objOFSession.getDBConnection();
conDB.setAutoCommit(false);
aservice = new AService(conDB);
bservice = new BService(conDB);
cservice = new CService(conDB);
aservice.method2();
bservice.method3();
cservice.method4(); // Exception comes, and commit is never executed
conn.commit();
}catch(Exception e){
conDB.rollback();
}
每个服务(*aservice、bservice、cservice)通常没有数据库连接并执行存储过程。SP 就像执行选择、更新、插入操作。
query = conConnectionDB.prepareCall(strCommand);
query.execute();
query.close();
if(errCode != 0){
throw new Exception(errCode,errorDesc);
}
}
问题我可以看到存储过程返回 0 以外的错误代码,因此它进入我的 if 条件并引发异常。我正在捕获异常并调用 rollback(),但正如我所见,没有任何更改被回滚。我的交易继续进行。
我还验证了 SP 不包含提交语句。
Java 代码中的提交语句都不会被执行,因为会抛出异常。
我还在开始时设置了AutoCommit(false)
。
请告诉我如何进一步解决此问题。
最佳答案
A database transaction consists of ...
...
One data definition language (DDL) statement
即发出 DDL 语句后,例如CREATE TABLE
语句之前完成的所有更改均已提交,ROLLBACK
对它们没有影响。
插图示例
SQL> insert into test(x) values(1);
1 row created.
SQL>
SQL> create table tmp (x number);
Table created.
SQL>
SQL> rollback;
Rollback complete.
SQL>
SQL> select * from test;
X
----------
1
关于java - JDBC 事务未回滚 - setAutoCommit(false),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57077166/
public void batchUpdate() throws SQLException { Statement stmt = null; try { this.connection.set
我遇到过this甲骨文java教程。作为该主题的初学者,我无法理解为什么需要在事务结束时设置 con.setAutocommit(true);。 这是神谕的解释: The statement con.
假设我有一个创建数据库连接的常用方法: Connection getConnection() throws SQLException { Connection con = ... // cre
这是典型的项目结构,一旦用户登录到应用程序,就会创建数据库连接。 Login.java{ Creating DB Connection DriverManager.registerDr
如果我们在 Oracle DB 的 Java 类中使用两次 setAutoCommit(true) 会发生什么。 try{ Connection conn = getConnection();
我正在使用 postgresql 9.2 和 C3p0 0.9.2.1,我创建了一个连接定制器来禁用 autoCommit 并设置 transactionMode 但是当我在 InitialConte
如果我执行 connection.setAutoCommit(false); 会发生什么,它会在数据库端创建一个新事务吗? 最佳答案 根据documentation , connection.setA
我注意到一些程序员使用 COMMIT 其他使用 conn.setAutoCommit(true); 来结束事务或回滚那么使用一个而不是另一个? 主要区别在哪里? conn.setAutoCommit(
我注意到一些程序员使用 COMMIT 其他使用 conn.setAutoCommit(true); 来结束事务或回滚那么使用一个而不是另一个? 主要区别在哪里? conn.setAutoCommit(
从池中获取数据库连接 (conn)。 假设该连接上的autocommit 为 TRUE。 现在 conn.setautocommit(false) 已设置; 然后经过几次语句更新,最后 conn.co
我的提问的基本根源来自于这种观察。当我使用Hibernate并进行任何查询时,我在MySQL日志中得到以下内容: SET autocommit=0 insert into SimpleNamedEnt
我在创建连接后立即设置 con.setAutoCommit(false); 以便数据库中没有未提交的内容。但事实证明,如果您关闭连接,则无论您的 setAutoCommit() 状态如何,所有事务都将
DB 是 Oracle。 我想为 SQL 存储过程和函数使用 Connection.setAutoCommit。会成功吗? 对于调用过程,我使用 CallableStatement 最佳答案 不行,c
我正在尝试在 JDBC 中为我正在开发的应用程序执行事务,但 Connection#setAutoCommit(false) 似乎不起作用。代码如下: String insertCliente = "
我遇到了 Postgres 驱动程序的问题,该驱动程序是 9.1-901.jdbc4,我的数据库服务器是 Postgres 10。我在批量更新中遇到问题,因此我尝试将驱动程序更改为版本 42.2.5。
我有一个 Spring Batch 项目,正在使用 Atomikos 进行事务管理。 这是我的数据源配置和atomikos配置。 @Bean public DataSource dataSou
我创建了一个 DBManager 类,如下所示 public class DBManager { public static String DRIVER = "oracle.jdbc.dr
假设我有以下代码。 try { connection.setAutoCommit(false) ; .... .... connection.commit(); } c
我对 set chained 有一些困惑setAutoCommit()中的声明net.sourceforge.jtds.jdbc.Driver中的方法 source code说: 2161 if (
我是一名优秀的程序员,十分优秀!