2011-02-01 26 views
8

Próbuję wykonać dwa zapytania wstawiania w jednym Statement, łącząc je w jedną transakcję.Wykonaj dwa różne zapytania w jednej transakcji

Szukałem w sposobie addBatch, ale jeśli dobrze rozumiem, to może być stosowany z jednym PreparedStatement na wykonanie tego samego wstawić wiele razy z różnymi parametrami, które mogą być stosowane na Statement obiektu dodać więcej zapytań do partii , ale bez możliwości dodawania parametrów (mógłbym więc móc dodać wartości w łańcuchu sql, style SQL injection).

Próbowałem też naiwnie podejść do pisania obu insertów w jednym słowie sql (insert into table1 values(?, ?); insert into table2 values(?, ?);), ale w ten sposób PreparedStatement widzi tylko dwa pierwsze parametry, a próba ustawienia trzeciego i czwartego rzuca wyjątek.

+3

z ciekawości, jaki jest powód, że nie chce korzystać z dwóch 'PreparedStatement' w tej samej transakcji? To ułatwiłoby ci życie! –

+0

Tak, chyba nie ma specjalnego powodu, żeby tego nie robić, poza tym, że o tym nie myślę. Dziękuję za wskazanie. –

Odpowiedz

22

Można wyłączyć automatyczne zatwierdzanie, wykonać dwa oddzielne sprawozdania, a następnie popełnić transakcję ręcznie:

connection.setAutoCommit(false); 
try { 
    ... 
    stmt1.execute(); 
    ... 
    stmt2.execute(); 
    connection.commit(); 
} catch (Exception ex) { 
    connection.rollback(); 
} 
Powiązane problemy