Многократный запрос вставки в Oracle - PullRequest
0 голосов
/ 30 июля 2011

У меня было требование выполнить два запроса на вставку в двух разных таблицах.

Я использую Oracle / Java Combination.

Какие варианты доступны в этом случае?

Ответы [ 4 ]

1 голос
/ 30 июля 2011

Если вы пытаетесь вставить одни и те же данные в две отдельные таблицы, вы можете использовать множественную вставку, например:

insert all
into table1(a, b)
into table2(a, b)
select 1 a, 2 b from dual;
0 голосов
/ 30 июля 2011

Вы можете проверить с помощью StoredProcedures и выполнить с PreparedStatement в JDBC API.Этот стажер вернет вам два набора результатов, которые вы можете получить с помощью метода getMoreResults ().Затем вы можете обработать наборы результатов отдельно.

0 голосов
/ 30 июля 2011

Самый простой способ - сделать две вставки последовательно, используя одно и то же соединение. Предполагая, что эта часть вашей точки зрения заключается в том, что вы хотите, чтобы две вставки происходили в одной транзакции, затем убедитесь, что вы отключили автоматическую фиксацию в соединении и явно зафиксировали после второй вставки.

Другой вариант - написать хранимую процедуру Oracle, которая выполняет вставки, и вызвать ее из Java с помощью PreparedStatement.

0 голосов
/ 30 июля 2011

Образец от devdaily.

package com.devdaily.sqlprocessortests;

import java.sql.*;

public class BasicJDBCDemo
{
  Connection conn;

  public static void main(String[] args)
  {
    new BasicJDBCDemo();
  }

  public BasicJDBCDemo()
  {
    try
    {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      String url = "jdbc:mysql://localhost/coffeebreak";
      conn = DriverManager.getConnection(url, "username", "password");
      doTests();
      conn.close();
    }
    catch (ClassNotFoundException ex) {System.err.println(ex.getMessage());}
    catch (IllegalAccessException ex) {System.err.println(ex.getMessage());}
    catch (InstantiationException ex) {System.err.println(ex.getMessage());}
    catch (SQLException ex)           {System.err.println(ex.getMessage());}
  }

  private void doTests()
  {
    doSelectTest();

    doInsertTest();  doSelectTest();
    doUpdateTest();  doSelectTest();
    doDeleteTest();  doSelectTest();
  }

  private void doSelectTest()
  {
    System.out.println("[OUTPUT FROM SELECT]");
    String query = "SELECT COF_NAME, PRICE FROM COFFEES";
    try
    {
      Statement st = conn.createStatement();
      ResultSet rs = st.executeQuery(query);
      while (rs.next())
      {
        String s = rs.getString("COF_NAME");
        float n = rs.getFloat("PRICE");
        System.out.println(s + "   " + n);
      }
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }

  private void doInsertTest()
  {
    System.out.print("\n[Performing INSERT] ... ");
    try
    {
      Statement st = conn.createStatement();
      st.executeUpdate("INSERT INTO COFFEES " +
                       "VALUES ('BREAKFAST BLEND', 200, 7.99, 0, 0)");
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }

  private void doUpdateTest()
  {
    System.out.print("\n[Performing UPDATE] ... ");
    try
    {
      Statement st = conn.createStatement();
      st.executeUpdate("UPDATE COFFEES SET PRICE=4.99 WHERE COF_NAME='BREAKFAST BLEND'");
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }

  private void doDeleteTest()
  {
    System.out.print("\n[Performing DELETE] ... ");
    try
    {
      Statement st = conn.createStatement();
      st.executeUpdate("DELETE FROM COFFEES WHERE COF_NAME='BREAKFAST BLEND'");
    }
    catch (SQLException ex)
    {
      System.err.println(ex.getMessage());
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...