2017-08-02 40 views
1

所以這是我的代碼部分:如何繞過初始化ResultSet?

  try {    
       for (int i = 0; i < n; i++){ 
        ResultSet res;     
        res = bdd.requete(sql); 
        doSomethingWithRes() 
       } 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 

我想在此塊結束時關閉ResultSet(節省資源),但如果我添加res.cose(),java會告訴我該res可能尚未初始化(對於n = 0,這是正確的)。有沒有辦法來初始化resultSet而不做查詢?

我也試過

  try {    
       for (int i = 0; i < n; i++){ 
        ResultSet res;     
        res = bdd.requete(sql); 
        doSomethingWithRes() 
       } 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 
      if (n>=1) 
       res.close() 

但是編譯器不接受它,即使它會工作。有沒有辦法強制編譯器接受這個?

+2

也許看看[與資源嘗試(https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)。這可以按如下方式使用:'try(ResultSet res = bdd.requete(sql)){doSomethingWithRes();} catch(Exception e){e.printStackTrace();}' – Lino

回答

2

您將不得不增加ResultSet實例的範圍;唯一的問題是你有多個,你應該關閉所有的人。我建議一個try-with-resources

try {    
    for (int i = 0; i < n; i++){ 
     try (ResultSet res = bdd.requete(sql)) { 
      doSomethingWithRes(); 
     } 
    } 
} 
catch (Exception e) { 
    e.printStackTrace(); 
}