2012-12-30 29 views
0

如何關閉此代碼中的ResultSet,Statement和Connection,因爲在點擊幾下之後,程序會給我提供錯誤com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:數據源拒絕建立連接,來自服務器的消息:「Too許多連接」如何關閉此代碼中的ResultSet,Statement和Connection?

這裏是代碼...

private void pautoInc() { 
    int i; 
    int len; 
    String code = ""; 
    try { 
     Statement s = Db.connectDb().createStatement(); 
     ResultSet rs = s.executeQuery("SELECT COUNT(*) AS x FROM product"); 
     while (rs.next()) { 
      String st = rs.getString("x"); 
      len = st.length(); 
      i = Integer.parseInt(st); 

      if (len == 1 & i != 9) { 
       i += 1; 
       code = "P0000" + i; 
      } else if (i == 9) { 
       i += 1; 
       code = "P000" + i; 
      } else if (len == 2) { 
       i += 1; 
       code = "P000" + i; 

      } else if (len == 3) { 
       i += 1; 
       code = "P00" + i; 
      } 
      prodid.setText(code); 
     } 
    } catch (Exception e) { 
     e.printStackTrace();; 
    } 
} 

}

回答

2
private void pautoInc() { 
    int i; 
    int len; 
    String code = ""; 
    Connection c = null; 
    Statement s = null; 
    ResultSet rs = null; 
    try { 
     c = Db.connectDb(); 
     s = c.createStatement(); 
     rs = s.executeQuery("SELECT COUNT(*) AS x FROM product"); 
     while (rs.next()) { 
      String st = rs.getString("x"); 
      len = st.length(); 
      i = Integer.parseInt(st); 

      // ... your business code 
     } 
    } catch (Exception e) { 
     e.printStackTrace();; 
    } finally { 
     if (null != rs) try { rs.close(); } catch (Exception e) { /* ignore */} 
     if (null != s) try { s.close(); } catch (Exception e) { /* ignore */} 
     if (null != c) try { c.close(); } catch (Exception e) { /* ignore */} 
    } 
} 
1
private void pautoInc() { 
int i; 
int len; 
String code = ""; 
Statement s = null; 
ResultSet rs = null; 
try { 
    s = Db.connectDb().createStatement(); 
    rs = s.executeQuery("SELECT COUNT(*) AS x FROM product"); 
    while (rs.next()) { 
     String st = rs.getString("x"); 
     len = st.length(); 
     i = Integer.parseInt(st); 

     if (len == 1 & i != 9) { 
      i += 1; 
      code = "P0000" + i; 
     } else if (i == 9) { 
      i += 1; 
      code = "P000" + i; 
     } else if (len == 2) { 
      i += 1; 
      code = "P000" + i; 

     } else if (len == 3) { 
      i += 1; 
      code = "P00" + i; 
     } 
     prodid.setText(code); 
    } 
} catch (Exception e) { 
    e.printStackTrace();; 
} finally { 
    try { 
     if (rs != null) rs.close(); 
     if (s != null) s.close(); 
    } catch(Exception e) { // can not close the rs or statement } 
} 

}

+0

你能解釋一下你的答案多一點? – ajacian81

0

您可以添加:

s.getMoreResults(java.sql.Statement.CLOSE_CURRENT_RESULT); 
Db.connectDb().commit(); 
Db.connectDb().close();   

你最好加:

Db.connectDb().setAutoCommit(false); 

ResultSet rs = s.executeQuery("SELECT COUNT(*) AS x FROM product");