【问题标题】:Call a Oracle Procedure in a Java Batch containing Insert and Update Queries (Statement)在包含插入和更新查询的 Java 批处理中调用 Oracle 过程(语句)
【发布时间】:2012-10-10 00:41:47
【问题描述】:

我正在开发一个基于 Java 的项目,其中的事情是通过以下方式实现的

  • 有一些类 (A,B,C,D....) 将 Hash Map 的键作为整数,将值作为字符串的数组列表。 arraylist 中的每个 String 元素都是一个 Oracle SQL 查询(INSERT 或 UPDATE)
  • (A,B,C,D....) 类的这些方法在 Map 中循环。使用 JDBC 语句 (**stmt.addBatch(String)**) 将特定键的所有 SQL 查询添加到批处理中。对于每个唯一键,都会创建和执行一个单独的批处理。
  • 有许多类 (X,Y,Z...) 正在填充此 Map 和字符串数组列表以放置不同的 INSERT 和 UPDATE 查询

现在,我需要为一些键添加一个 Oracle 过程调用,因此应该为各个键添加到字符串数组列表中。

我尝试在调用过程中添加以下字符串,但似乎没有一个适合我。

1. EXEC INSERT_AUTONUMBER_DATA(......)

2. BEGIN INSERT_AUTONUMBER_DATA(........) END;

我不想修改太多代码,因为它可能会影响其他区域。

我可以在批处理中添加一个 Callable 语句,但为此,我需要修改负责准备批处理的所有方法和类,这些方法和类在我的项目中大约 15 个(项目设计不是很好),另外,我必须编写一个标识过程调用的条件,以便准备一个可调用语句而不是语句。

有没有其他方法可以做到这一点,而不改变执行批次的类?

【问题讨论】:

    标签: java oracle stored-procedures jdbc callable-statement


    【解决方案1】:

    我尝试在批处理中添加以下调用语句。

    CALL INSERT_AUTONUMBER_DATA(......)
    

    这个字符串被添加到一个具有以下逻辑的语句中,它可以工作。

    Statement s = conn.createStatement();
    s.addBatch("CALL INSERT_AUTONUMBER_DATA(......)");
    s.addBatch(.....);
    .
    .
    .
    
    s.executeBatch();
    

    所以,在这里我可以通过 java.sql.Statement 批量调用一个过程

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      • 2016-01-24
      • 2020-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多