2011-05-10 12 views
5

La mia applicazione Java deve mantenere il cursore su Oracle DB per qualche tempo. Durante esso devono essere fatte altre istruzioni DB. Questo richiede connessioni DB separate o le stesse (quella del cursore) possono essere utilizzate?Il DB Oracle supporta più operazioni (parallele) per connessione?

Grazie.

+0

hai provato? quali risultati ha dato? – Mat

+0

no, non l'ho fatto. ancora – Ralkie

+0

Che tipo di applicazione Java stai parlando? Oracle sta perfettamente bene con sessioni dedicate che gestiscono una serie di dichiarazioni. Tuttavia, la maggior parte delle applicazioni Java sono app Web e le app Web generalmente utilizzano i protocolli * stateless * e il pool di connessioni; questo significa che è difficile prenotare una sessione di database per un utente specifico per emettere comandi per un periodo di tempo. Quindi, maggiori dettagli per favore. Inoltre intendevi * "parallelo" * o dovrebbe essere "sequenziale"? Oracle supporta Parallel query/DML ma è una domanda diversa. – APC

risposta

5

L'unica limitazione è che una singola istruzione può avere un solo ResultSet in un dato momento. Si noti che una dichiarazione può produrre più gruppi di risultati, ma si deve accedere in sequenza (usando getNextResult())

Per essere in grado di avere più aperte di risultati/cursori ti servono più java.sql.Statement oggetti.

Una singola connessione può avere solo una singola istruzione attiva (cioè in esecuzione). Quindi, se hai bisogno di più cursori aperti (ResultSet), devi eseguirli in sequenza (uno dopo l'altro) ciascuno con il proprio oggetto Statement.

3

Oracle non ha alcun problema con ciò che la gente MSSQL chiama MARS (Set di risultati attivi multipli).

Si può vedere questo genere di cose in un sacco di codice PL/SQL, e se è per questo PL/SQL è "solo" un cliente al motore SQL come è il codice Java:

for a in (select field1, field2 from table1) loop 
    for b in (select * from table2 where SomeField = a.Field1) loop 
    ... 
    end loop; 
end loop; 

Non credermi sulla parola, comunque. Puoi creare un ciclo nidificato come questo te stesso in Java.

0

È possibile utilizzare il concetto di pool di database.

Click Here

Esso fornisce un pool di connessioni al database in modo in caso di necessità si può ottenere una connessione al database da piscina.

È anche ottimizzato per la memoria poiché la connessione al database e la chiusura sono un processo pesante.

+0

L'intero punto della domanda è che l'OP non vuole più connessioni, ma, vuole sapere se è in grado di eseguire altri sql contemporaneamente mantenendo un cursore aperto - quale può! –

+0

Sì, posso (e probabilmente lo farò) usare il pooling, ma, come ha fatto notare James, la domanda riguardava l'uso della stessa connessione. – Ralkie

1

Ovviamente è possibile tenere premuto più cursori aperti mentre si inviano altre query sulla stessa connessione. Tuttavia, non è possibile emettere altre query o istruzioni mentre è aperto il primo cursore. Questo perché solo una richiesta può essere attiva (cioè essere eseguita) in una sessione Oracle in qualsiasi momento.

Problemi correlati