OVH Cloud OVH Cloud

[JDBC] Garder une connexion tout au long du programme ?

4 réponses
Avatar
Arnaud
Hello !

J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....


Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.

L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.

Merci d'avance pour vos conseils

--
Arnaud

4 réponses

Avatar
Fabien Bergeret
Arnaud wrote:
Hello !

J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....


Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.

L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.

Merci d'avance pour vos conseils

--
Arnaud
Pas de pb, les serveurs savent (heureusement) gerer plusieurs connexions

simultanees.
Les conflits/locks sont traites au niveau des transactions, pas des
connexions, donc pas d'impact de ce cote

Avatar
Simon OUALID
Oui c'est tout à fait possible, en gardant une référence à la connexion
quelque part dans le code.

Mais attention aux effets de bords concernant la gestion des
transactions, les locks, éventuellement le multithreading... et aussi au
fait que la base puisse fermer la connexion (timeout) en cas
d'inactivité prolongée.

++

Symon

Arnaud wrote:
Hello !

J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....


Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.

L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.

Merci d'avance pour vos conseils

--
Arnaud


Avatar
Cimballi
Plutôt que de garder une connexion ouverte très longtemps, utilise un pool de
connexions. Il y a une API chez Apache qui gère ça très bien...

Cimballi


Arnaud wrote:
Hello !

J'interroge dans un de mes programmes une base de données (Derby ou
MySQL, ça dépend) par l'intermédiaire d'un driver JDBC avec ce type de
code :
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection(dsURL);
Statement .....


Je ne suis pas un pro en SQL et une question me tracasse : puis-je
garder autant de temps que je veux un objet Connection sachant que je ne
suis pas le seul à me connecter à cette base de données ? En général
dans les exemples, la connection est fermée de suite après le traitement.

L'idée est que l'utilisateur ait une connexion permanente à la base de
données et exécuter x requêtes, sans réobtenir une connexion à chaque
fois. Ce qui veut dire que l'objet connection va rester actif plusieures
heures. Je ne voudrais pas engendrer de conflits ou de locks vis à vis
d'autres utilisateurs de la BDD extérieurs à mon programme.

Merci d'avance pour vos conseils

--
Arnaud


Avatar
Arnaud
merci pour l'info

--
arnaud