2015-08-27 50 views
-1

我在java SE中編程,當嘗試訪問以創建與mysql的連接時出現錯誤。我可以連接到mysql,實際上,運行bucle時顯示錯誤。
我在這個程序中做的是檢查我的數據庫顏色表中的字符串,如果它找不到任何東西,它會在表中創建一個帶有自動增量ID的字符串。
它工作正常,但檢查一段時間後,它給了我錯誤。
我附上錯誤的圖像和創建連接的代碼。

enter image description here驅動程序無法創建到mysql的連接

public Integer codiColor(String col){ 

    Integer codi=null; 

    if(col.equals("")) 
     return 1; 

    try { 
     Class.forName(driver).newInstance(); 
     con = DriverManager.getConnection(url, usuari, password);//here is the error 
     try { 
      Statement st = con.createStatement(); 
      String sql = "SELECT CODICOL FROM COLORES where COLOR ='"+col+"'"; 
      ResultSet res = st.executeQuery(sql); 

      if(res.next()){ 
       codi = res.getInt("CODICOL"); 
      } 
      try { res.close(); } catch (Exception e) {} 
      try { st.close(); } catch (Exception e) {} 
     } 
     catch(SQLException s){ 
      JOptionPane.showMessageDialog(null, "Error:\n"+s.getMessage(), 
        "ERROR.",JOptionPane.ERROR_MESSAGE); 
     } 
     finally{ 
      try { con.close(); } catch (Exception e) {} 
     } 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
    return codi; 
} 

該代碼是檢查如果顏色已經存在與否的一個。

編輯:

url = "jdbc:mysql://192.168.1.200:3306/mybbdd?zeroDateTimeBehavior=convertToNull"; 
+0

檢查沒有用netstat -an命令和比較,我使用的是Windows用ulimit – Shriram

+0

的限制,這可能打開的套接字做到這一點?從未做過 – danibg

+0

您正在爲每次通話創建一個新的連接,但似乎舊的連接並未妥善處理。你應該使用某種「持久連接」。 – jkavalik

回答

-1

在你的代碼給在每次調用一個新的連接,但你需要了解你的操作系統可以讓你只有有限的連接。交叉後限制它將不允許您進行其他連接。

我不知道什麼是你的要求,但如果你真的需要連接

所以,更好的選擇是,你需要連接池。如果用戶需要連接來執行某個任務,則用戶可以從連接池取得連接,並且在完成工作後用戶可以將該連接返回到連接池。

爲達到此目的,您需要設計您的配置文件或者您需要設計界面庫界面並根據您的要求實施。

-1

我找到了出路。我搜索了java錯誤給我的數字,我發現添加一個註冊表鍵可以做更多的連接應該工作。 我首先在服務器上做了這個,爲了允許來自客戶端的更多連接,但它仍然沒有工作,所以我試圖在我的電腦上完成它,現在它工作。 This is the link from microsoft

+0

你已經移動了問題發生的地步。你還沒有解決這個問題。 – EJP

0

問題是,con顯然是一個成員變量,它應該是一個局部變量。如果這段代碼和其他類似代碼是從多個線程中調用的,那麼con的值將被覆蓋並因此丟失,所以會導致連接泄漏。由於同時使用連接,您幾乎肯定也會遇到其他問題。使其成爲局部變量。

注意,自2007年以來,您並不需要Class.forName()行。如果您使用try-with-resources,則連接,語句和結果集的關閉將是多餘的。你應該使用準備好的聲明。

String sql = "SELECT CODICOL FROM COLORES where COLOR =?"; 
try (con = DriverManager.getConnection(url, usuari, password); 
     PreparedStatement st = con.prepareStatement(sql); 
    ) { 
     st.setObject(1, col); 
     ResultSet res = st.executeQuery(); 
     if(res.next()){ 
      codi = res.getInt("CODICOL"); 
     } 
    } 
    catch(SQLException s){ 
     JOptionPane.showMessageDialog(null, "Error:\n"+s.getMessage(), 
       "ERROR.",JOptionPane.ERROR_MESSAGE); 
    } 
} 
catch (Exception ex) 
{ 
    ex.printStackTrace(); 
} 
相關問題