【问题标题】:calling PLSQL procedure from Java从 Java 调用 PLSQL 过程
【发布时间】:2015-03-09 16:16:25
【问题描述】:

下面是我的 Java 程序。我正在调用一个 PLSQL 过程来更新员工姓名。我关闭了 PLSQL 代码中的提交,以便我可以从 Java 代码中进行提交和回滚。但即使在我关闭自动提交并进行显式回滚之后,表格中的详细信息仍然会更新。 如何?我不知道,请帮忙。

这是我的 Java 代码。在 PLSQL 中,它只是读取值并执行更新语句。没有提交。

public class TestCommit {
    public static void main(String[] args) throws SQLException, IOException {
        CallableStatement callableStatement = null;
        Connection conn = null;
        try {
            DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
            conn = DriverManager
                    .getConnection("jdbc:oracle:thin:testuser/testpwd@//testdb:1521/testbx");
            conn.setAutoCommit(false);
            String sql = "{call testpkg.saveemployee(?,?)}";
            callableStatement = conn.prepareCall(sql);
            callableStatement.setString("name", "spider");
            callableStatement.setString("id", "A101");
            callableStatement.executeQuery();
            conn.rollback();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            // Close the statement
            callableStatement.close();
            // Close the connection
            conn.close();
        }
    }

}

编辑:PLSQL

CREATE OR REPLACE PROCEDURE saveemployee(
       name IN employee.ename%TYPE,
       id IN employee.eid%TYPE)
IS
BEGIN

  UPDATE employee SET ename = name WHERE eid = id;

END;

【问题讨论】:

  • 向我们展示存储过程
  • 尝试在您的 getConnection 调用之前添加此代码和平(使用适当的 try/catch 块)Class.forName('oracle.jdbc.driver.OracleDriver');
  • 您使用的是哪个版本的 JDBC 驱动程序?您的代码看起来确实正确。
  • 我在连接之前添加了该行,它可以工作。我删除了它,现在仍然可以使用。我假设 PLSQL 主体在我拍摄快照之前可能已经改变。我将与数据库人员确认并在此处更新以避免歧义。
  • 我投票赞成关闭,因为就目前而言,这个问题不会帮助任何搜索自动提交或 JDBC 问题的人......我想投票赞成删除“错误的想法”,但没有找到选项

标签: java jdbc plsql


【解决方案1】:

我的错,我调用了一个错误的程序,在两个不同的包中有两个版本的同一个程序, 一个有提交,另一个没有提交。我打电话给那个有提交的人。 现在从两个过程中都删除了提交,我的代码现在似乎可以工作了。

【讨论】:

  • 我不需要为此提供答案,但我仍然提供了答案,因为如果明天有人遇到同样的问题,他们可以知道我是如何克服上述问题的。我没有删除问题的原因是因为问题以及 cmets 都很有用。无论谁对此投了反对票,请注意解释原因,以便如果您与我的想法不同,我可以改进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2013-04-30
  • 1970-01-01
  • 2018-09-09
  • 2016-12-23
  • 1970-01-01
相关资源
最近更新 更多