2016-04-21 69 views
1

因爲我有一些疑問是簡單的,有些需要特殊的操作,在我的項目我使用JDBI的對象API與流體語法混合,與它一起的點播功能,像這樣:使用JDBI的onDemand語法,是否需要關閉句柄?

public abstract class MyDAO implements GetHandle { 

    @SqlQuery("SELECT anInt FROM aTable;") 
    public abstract int getAnInt(); 

    public List<Integer> insertThings(List<Thing> things) { 

     Handle h = getHandle(); 

     PreparedBatch batch = h.prepareBatch("INSERT INTO thingsTable (a, b) VALUES (?, ?)"); 

     for (Thing thing : things) { 
      batch.add(things.getA(), thing.getB()); 
     } 

     List<Integer> ids = batch.executeAndGenerateKeys(IntegerColumnMapper.WRAPPER).list(); 

     h.close(); 

     return ids; 
    } 
} 

//Elsewhere in my code 

MyDAO dao = jdbi.onDemand(myDAO.class); 

dao.insertThings(things); 

所以我的問題是,當以這種方式使用JDBI時,我是否需要確保像我在示例中那樣關閉我的句柄,還是像抽象方法那樣處理閉合處理?

回答

1

使用onDemand時不需要關閉句柄。

從文檔:

用於獲得SQL對象實例將自動獲取和釋放連接,因爲它需要的最後一種方法。通常這意味着它將獲得一個連接來執行語句,然後立即釋放它,但各種事物(例如打開事務或基於迭代器的結果)將導致連接保持打開狀態,直到事務完成或迭代結果完全遍歷爲止。

請參閱本頁面的結尾:http://jdbi.org/sql_object_overview/

+0

這就是我的想法,我的擔心是正義的,因爲我是開手柄的通常流程以外,我將不得不關閉它自己以及。 –

相關問題