2010-11-23 7 views
0


CallableStatement und PreparedStatements sind vorkompiliert. Sind sie in Bezug auf eine Verbindung fertig? Ich meine, nehmen wir an, dass sich etwa 100 Verbindungsobjekte in einem Verbindungspool eines Anwendungsservers befinden. Es gibt eine Klasse, die Callable und PreparedStatements verwendet. Lässt die Methode sagen, dass für das heißt verwendet wird: zum ersten Mal eine Verbindung abgerufen wird von Pool und der Vorgang wird bearbeitet genannt wirdVerhalten von aufrufbaren und vorbereiteten Anweisungen in einem Anwendungsserver

public void invokePreparedAndCallableStatements(){ 
    //Fetches connection from pool 
    Connection con = getConnectionFromPool(); 
    CallableStatement cs = con.prepareCall(.....); 
    cs.register...(...); 
    cs.execute(); 
    ... 
    ... 
    PreparedStatement st = con.prepareStatement(...); 
    st.setXXX(..); 
    st.executeUpdate(); 
    ... 
} 

Nun, wenn das Verfahren. Die Callable und Prepared Statements werden kompiliert. Wenn die Methode weitere 99 Mal aufgerufen wird, jedes Mal, wenn eine andere Verbindung aus dem Pool abgerufen wird, werden dann die Anweisungen für jede Verbindung ausgeführt?
Was ist der optimale Weg, um Aussagen in diesem Zusammenhang zu verwenden? Ich kann sie nicht machen (con.prepareCall() oder con.prepareStatement()) statisch, weil die Verbindung nicht statisch ist.

Antwort

1

Der Code wird tatsächlich kompiliert und im gemeinsamen Pool der Datenbank gespeichert. Eine beliebige Anzahl von Verbindungen, die denselben Code verwenden, profitiert vom Cache. Der kompilierte Code wird so lange gespeichert, wie es die Speichergrenzen zulassen.

+0

Dank JOTN. Gibt es eine Möglichkeit, dass dieselbe PL/SQL-Prozedur mehrere kompilierte Versionen für denselben Code enthält? –

0

Die Anweisungen werden vorkompiliert. Das Pooling basiert auf Ihren angegebenen Parametern.

Hinweis: Wenn Sie JDBC 3.0 verwenden, können Sie auch Ihre PreparedStatements zusammenfassen. Referenz: What's new in JDBC 3.0

Verwandte Themen