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.
Ce qui provoque :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 sql.connect(); ResultSet rs = sql.requete( req ); sql.close();
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é.
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.
Pourriez vous m'éclairer sur la bonne façon de procéder.
MErci d'avance.
Partager