Probleme acces BDD Oracle ORA 12519
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:
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
| 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();
}
} |
Cette methode (calcul) est appellé à intervalle régulier ( toutes les 4 secondes ).
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 :
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
|
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;
}
} |
La ligne a laquelle une erreur m'est indiquée est la suivante :
con = DriverManager.getConnection(this.getUrl(), this.getLogin(), this.getPassword());
Si quelqu'un a une idée : je suis preneur !
Merci d'avance
Cordialement
Taille de la table TABLE_PROTOTYP
Bonjour,
Si le temps d'exécution de calcul() excède 4 secondes (dans le cas d'une table TABLE_PROTOTYP particulièrement grande) alors il est possible que plusieurs demandes d'accès se superposent et finissent par dépasser le nombre d'accès autorisés.
Quelle méthode est utilisée pour relancer l'appel de calcul() : thread ou bien timer ?