【问题标题】:Insert in Oracle data from Java loop从 Java 循环插入 Oracle 数据
【发布时间】:2016-02-25 07:02:11
【问题描述】:

我尝试执行此代码以在 Oracle 表中生成随机数据:

DriverManager.registerDriver(new oracle.jdbc.OracleDriver());

        // Connect to the database
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "admin", "qwerty");

        PreparedStatement pstmt
            = conn.prepareStatement("BEGIN "
                + "FOR loop_counter IN 1..10 "
                + "LOOP "
                + "INSERT INTO EVENTS (EVENTID, SOURCE, TYPE, EVENT_DATE, DESCRIPTION) "
                + "VALUES (loop_counter, loop_counter, 'warning', "
                + "TO_DATE(TRUNC(DBMS_RANDOM.VALUE(TO_CHAR(DATE '2000-01-01','J') ,TO_CHAR(DATE '9999-12-31','J'))),'J'), "
                + "DBMS_RANDOM.string('x',15)); "
                + "END LOOP; "
                + "COMMIT; "
                + "END; ");

        pstmt.execute();
        pstmt.close();
        conn.close();

此代码在 PL/SQL deloper 中成功执行,但由于某种原因,它在 JUnit 测试执行中挂起。你知道为什么吗?

【问题讨论】:

  • 你说的挂起是什么意思?
  • JUint 未执行。我刚刚看到输出消息测试开始了。
  • 尝试找出究竟是哪个语句挂起。您可以在每条语句后添加System.out.println 或记录以找出答案。
  • 另外,您可以将该 SQL 代码存储在一个变量中,将其打印出来或记录下来,然后在您的数据库上执行该输出,以确保您的 Java 代码执行的 SQL 完全相同.
  • 该代码是否在单个循环中?开始时在循环中创建连接非常繁重。

标签: java oracle junit oracle11g


【解决方案1】:

如果您在 Java 中进行循环并执行批量插入会更简单。这个现有的答案应该可以帮助你:

Efficient way to do batch INSERTS with JDBC

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2017-03-13
    • 2013-11-17
    相关资源
    最近更新 更多