Bonjour,
J'ai un problème de mémoire avec mes connections SQL JDBC.
Les premières exécutions du programme passent sans problème, jusqu'à la 10ème à peu près ou tout plante.
Comme s'il y avait un problème de libération de mémoire.
Voici mon code :
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 ConnectionSQL connection = new ConnectionSQL(); try { connection.getconnect(); try { ResultSet res = connection.getResult("SELECT * FROM ...;"); try { while (res.next()) { //traitement... } } finally { res.close(); } } finally { try { connection.finalize(); } catch (Throwable e) { e.printStackTrace(); } } } catch (Exception e) { String error = e.toString(); System.out.print(error); }
Et voici ma classe ConnectionSQL :
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 public class ConnectionSQL { protected boolean connectstatus; protected Statement instruction; protected Connection connexion; protected ResultSet res; protected String host = "..."; protected String user = "..."; protected String pwd = "..."; protected String driver = "com.mysql.jdbc.Driver"; public ConnectionSQL() { } public void finalize() throws Throwable { if (this.res != null) { try { this.res.close(); } catch (SQLException sqlex) { this.res = null; } } if (this.instruction != null) { try { this.instruction.close(); } catch (SQLException sqlex) { } this.instruction = null; } if (this.connexion != null) { try { this.connexion.close(); } catch (SQLException sqlex) { } this.connexion = null; } super.finalize(); } public Connection getconnect() { connectstatus = false; try { Class.forName(driver).newInstance(); connexion = DriverManager.getConnection("jdbc:mysql://" + host + "/mabase",user,pwd); this.connectstatus = true; } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } try { this.instruction = connexion.createStatement(); } catch (SQLException ex){ System.out.println(ex); } return connexion; } public ResultSet getResult(String query) { if(connexion != null && instruction != null) { try{ res = instruction.executeQuery(query); } catch (SQLException e) { e.printStackTrace(); } } return res; } public boolean executeQuery(String query) { try { instruction.executeUpdate(query); return true; } catch (SQLException e) { e.printStackTrace(); return false; } } public Statement getInstruction() { return instruction; } public boolean getConnectstatus() { return connectstatus; } }
Voyez vous un problème ?
Merci.
Partager