2011-07-30 41 views
0

2つの異なるテーブルで2つの挿入クエリを実行する必要がありました。Oracleの複数の挿入クエリ

私はOracle/Javaの組み合わせを使用しています。

この場合、どのようなオプションがありますか?

+0

HM、JDBC APIを使用してSQLが一つの選択肢だろう...正確には何ですか問題?今日は何を使用していますか? – home

+0

私はフォームを持っていました。フォームの提出時に、私は同時に2つの異なるテーブルにデータを挿入する必要があります。 yr 2番目の質問を理解できませんでした.... – Ankit

+0

以前にJavaでプログラミングしたことがありますか? –

答えて

0

最も簡単な方法は、同じ接続を使用して連続して2つの挿入を行うことです。 2つの挿入が同じトランザクション内で発生するようにすることを要点とする場合、接続で自動コミットを無効にし、2回目の挿入後に明示的にコミットすることを確認します。

もう1つの方法は、挿入を行うOracleストアドプロシージャを作成し、PreparedStatementを使用してJavaから呼び出すことです。

0

サンプルは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()); 
    } 
    } 
} 
+0

サンプルにはmysqlがありますが、oracleドライバを使用する必要があります。 – Cris

+1

ちょっとした注意:INSERT文のすべての列を常に明示的に指定して、テーブルレイアウトの変更に対してより堅牢にすることをお勧めします。 –

+2

両方のインサートをトランザクションに入れて、両方のインサートが成功するかどうかを確認することをお勧めします。 – rsp

0

StoredProceduresで確認し、JDBC APIでPreparedStatementで実行できます。そのインターンは2つのresultSetを返します。これはgetMoreResults()メソッドで取得できます。結果セットを別々に処理することができます。

1

あなたは、このようなマルチテーブルのインサートを使用することができる2つの別々のテーブルに同じデータを挿入しようとしている場合:

insert all 
into table1(a, b) 
into table2(a, b) 
select 1 a, 2 b from dual;