java - 在检索输出参数的值之前应该调用 commit() 吗?

标签 java sql oracle procedure autocommit

在编写 java JDBC 代码来调用存储过程时,我使用的是 con.setAutoCommit(false); 我的问题是以下方法有什么区别:

方法 1:

        con = DBConnection.getConnection();
        con.setAutoCommit(false);
        stmt= con.prepareCall("{call updateEmp(?,?,?,?,?,?)}");
        stmt.setInt(1, id);
        stmt.setString(2, name);
        stmt.setString(3, role);            
        stmt.registerOutParameter(6, java.sql.Types.VARCHAR);

        stmt.executeUpdate();
        con.commit();
        //read the OUT parameter AFTER commit
        String result = stmt.getString(6);

或方法 2:

        // Read the OUT parameter BEFORE commit
        String result = stmt.getString(6);
        con.commit();

最佳答案

我认为这取决于您调用的存储过程是否进行自己的提交。我希望有一个更新过程接受参数,并设置参数以在内部进行提交或回滚。

在这种情况下,调用 setAutoCommit(true) 或调用 con.commit() 不会产生任何效果,并且无论何时调用 stmt.getString(6),out 参数都会有一个值。如果存储过程本身没有提交,那么如果您在调用 stmt.getString(6) 之后调用 con.commit(),我希望您的 out 参数为 null。

关于java - 在检索输出参数的值之前应该调用 commit() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47226722/

相关文章:

java - 将 java 应用程序数据冗余存储在文件中的最佳方法是什么?

java - 以下 SQL 查询是否正确计算表中的多个字段

使用 JDBC thin 和 JKS 的 Oracle 数据库 TLS1.2/SSL 连接

oracle - 按字母顺序对 varchar2 中的字符进行排序

java - Java中显示远程系统进程列表的库或jar

java - 我如何将 latlng 数组列表的值传递给多边形

php - 在 php 中创建注册表

c# - ORA-01756 :quoted string not properly terminated Exception

java - 如何使用 Spring RestTemplate 压缩 HTTP 请求?

sql - 在 SQL 中将日期时间与午夜进行比较的有效方法