重用CallableStatement
的實例通常被認爲是一種好的做法(檢查here)。是否可以在不同的連接上執行CallableStament?
但是,當創建一個CallableStatement
時,該陳述(根據我的理解)綁定 到特定的Connection
。因此,我們通常做的:
Connection con = pool.getConnection();
CallableStatement st = con.prepareCall("{ some stmt; }");
st.executeQuery();
st.close();
con.close();
從我檢查,以下是不會執行查詢:
Connection con = pool.getConnection();
CallableStatement st = con.prepareCall("{ some stmt; }");
con.close();
con = pool.getConnection(); // possibly another new connection, different than the one used to create the CallableStatement instance
st.executeQuery();
st.close();
我的問題是:如果我想重用我所有的CallableStatement
實例,但另一方面仍然能夠獲得新的連接並關閉舊的連接(不總是有相同的連接打開)我該怎麼辦?
所以,這意味着在執行查詢之前每次都執行'prepareCall'就可以了嗎?我沒有完全理解你的答案。它們被緩存,所以,我可以多次調用相同的'prepareCall'? – insumity
@foobar IIRC,是的,這是正確的。每次調用prepareCall,JDBC都會檢查它是否已經存在於緩存中。 – djechlin
謝謝,這回答我的問題(將在5分鐘內接受你的答案)。如果你可以在你的真實答案中附上你的評論答案,會很好。謝謝 ;) – insumity