Problèmes Multiples connexions
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:
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:
1 2 3
| sql.connect();
ResultSet rs = sql.requete( req );
sql.close(); |
Ce qui provoque :
Code:
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.