Bonjour,
Voici mon problème. J'ai un programme JAVA avec une interface graphique, et différents accès a une base de donnée Oracle installée localement. Au bout d'un certain temps d'utilisation, l'erreur suivante apparait:
" ORA-12519, TNS: no appropriate service handler found
The Connection descriptor used by the client was : 127.0.0.1:1521:XE"
A priori l'erreur semble venir du fait qu'il y aurait trop de sessions / connexions. Une des solutions semblet être d'augmenter le nombre de sessions :
"alter system set processes=100 scope=spfile;
alter system reset sessions scope=spfile sid=’*';"
Cette solution m'enchante peu, vu que peut importe le nombre de processus que j'autorise, a un moment ou a un autre je l'atteindrai. Je me suis donc dis que mon erreur devait venir du fait que je ne fermais pas la connexion a la base de donnée. Pourtant même en fermant la connexion apres chaque acces a la bdd, l'erreur survient tot ou tard. Ci-joint la partie du code qui semble provoquer ce problème:
Cette methode (calcul) est appellé à intervalle régulier ( toutes les 4 secondes ).
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 public void calcul() { try { c = new ConnexionDB(); con = c.getConnection(); s = con.createStatement(); FehlerOutput fo = new FehlerOutput(); int apnr = fo.getAktuelleAbpressungNr(); String query = "SELECT COUNT(*) FROM TABLE_PROTOTYP WHERE ABPRESSUNG_NR="+apnr; ResultSet rs = s.executeQuery(query); int anzahl = 0; while (rs.next()) { anzahl = rs.getInt(1); } float prozent = (float)anzahl / (float)this.Teile * 100; if (prozent > 100) { prozent = 100; } prozent = prozent * 100; prozent=Math.round(prozent); prozent /= 100 ; this.setAusschuss(prozent); rs.close(); con.close(); } catch (SQLException e) { e.printStackTrace(); } }
La ligne a laquelle une erreur m'est indiquée est la suivante :
con = c.getConnection();
Et voici la classe qui me permet d'initialiser la connexion à la base de donnée :
La ligne a laquelle une erreur m'est indiquée est la suivante :
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 public class ConnexionDB { private String url; private String login; private String password; private Connection con = null; public ConnexionDB() { this.url = "jdbc:oracle:thin:@127.0.0.1:1521:XE"; this.login = "yyy"; this.password = "xxx"; } public ConnexionDB(String url, String login, String password) { this.url = url; this.login = login; this.password = password; } public Connection getConnection() { try { Class.forName("oracle.jdbc.driver.OracleDriver"); con = DriverManager.getConnection(this.getUrl(), this.getLogin(), this.getPassword()); } catch (ClassNotFoundException e) { e.printStackTrace(); System.err.println("Error loading JDBC drivers"); } catch (SQLException e) { e.printStackTrace(); System.err.println("Error starting Connection"); } return con; } }
con = DriverManager.getConnection(this.getUrl(), this.getLogin(), this.getPassword());
Si quelqu'un a une idée : je suis preneur !
Merci d'avance
Cordialement
Partager