Bonjour
C'est juste une petite question sur ce qu'il est bon de faire.
J'ai codé une classe se connectant à une base de données et exécutant des requêtes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
 
public class SqlQuery 
{
	private Properties _prop = new Properties();
	private Connection _con;
	private Statement _statement;
	private String _host;
	private String _user;
	private String _passw;
	private String _db;
 
 
	public SqlQuery()
	{
		try {
			_prop = PropsUtils.load( new File("Properties/sql.properties") );
		}
		catch (Exception e1) {
			e1.printStackTrace();
		}
		_user = _prop.getProperty( "sql.user" );
		_passw = _prop.getProperty( "sql.pass" );
		_host = _prop.getProperty( "sql.host" );
		_db = _prop.getProperty( "sql.db" );		
	}
 
	public void connect() throws SQLException, Exception
	{
		System.out.println( "NEW CONNECTION" );
		Class.forName("com.mysql.jdbc.Driver");
 
		if( _host.compareTo("localhost") == 0 )
		{
			String host = "jdbc:mysql://" + _host + "/" + _db + "?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull";
			_con = DriverManager.getConnection( host, _user, _passw );
		}
		else
		{
//			String host = "jdbc:mysql://"+ _host + ":3306/" + _db + "?useUnicode=true&characterEncoding=UTF-8";
			String host = "jdbc:mysql://"+ _host + ":3306/" + _db;
			_con = DriverManager.getConnection( host, _user, _passw );
		}
		_statement = _con.createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE );
	}
 
	public ResultSet requete( String requete ) throws SQLException
	{
		ResultSet rs = null;
		rs = _statement.executeQuery( requete );
		return rs;
	}
 
	public ResultSet requeteUpdate( String requete ) throws SQLException
	{
		_statement.executeUpdate( requete, Statement.RETURN_GENERATED_KEYS );
		ResultSet rs = _statement.getGeneratedKeys();
		return rs;
	}	
 
 
	public void close() throws SQLException
	{
		_con.close();
		_statement.close();
	}
 
}


Le truc c'est que j'appel énormément de fois cette classe via diverses méthodes un peu partout dans mon code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
sql.connect();			
ResultSet rs = sql.requete( req );
sql.close();
Ce qui provoque :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The driver was unable to create a connection due to an inability to establish the client portion of a socket.
 
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. 
 
For Unix-based platforms, see the manual page for the 'ulimit' command. Kernel or system reconfiguration may also be required.
J'ai essayé de ne déclarer qu'une instance de ma classe SqlQuery et de passer cette instance en paramètres de mes fonctions mais la j'ai une erreur me Disant que le ReusltSet à déjà été fermé.

Pourriez vous m'éclairer sur la bonne façon de procéder.
MErci d'avance.