2011-07-30 124 views
0

我曾要求在兩個不同的表中執行兩個插入查詢。Oracle中的多個插入查詢

我正在使用Oracle/Java組合。

這種情況下可用的選項有哪些?

+0

HM,使用JDBC API將是一個選擇SQL ......到底是什麼問題?你今天用什麼? – home

+0

我有一個表格。在提交表單時,我需要同時將數據插入到兩個不同的表中。無法理解你的第二個問題...... – Ankit

+0

你曾經在Java中編程過嗎? –

回答

0

最直接的方法是使用相同的連接順序執行兩個插入。假設你的觀點的一部分是你希望兩個插入發生在同一個事務中,那麼確保你已經在連接上禁用了自動提交,並且在第二次插入之後顯式提交。

另一種選擇是編寫一個執行插入操作的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執行。該實習生將返回兩個resultSets,您可以通過getMoreResults()方法獲得這兩個resultSets。然後可以分別處理結果集。

1

如果你想在同一數據插入到兩個獨立的表,你可以使用一個多表插入這樣的:

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